Androidカスタムタイトル(MVPフレームワーク用)

以前にカスタムヘッダーに関する記事を書きましたが、特にMVPフレームワークと組み合わせた場合、それでも使用するのは不便です。そこで今回は、MVPフレームワークと組み合わせることができる別の記事を書きます。関連記事は後日更新されます。

カスタムビュー-TitleBar

MVPフレームワーク

タイトルバー

public class TitleBar {
    
    
    /**
     * 默认标题栏(带后退按钮)
     *
     * @param context            上下文
     * @param title              标题
     * @param leftActionListener 回退按钮监听
     * @return
     */
    public static TitleBar create(Context context, String title, LeftActionListener leftActionListener) {
    
    
        return new TitleBar(context, title, "",  false, leftActionListener, null);
    }

    /**
     * 扩展标题栏(带后退按钮,小标题)
     *
     * @param context             上下文
     * @param title               标题
     * @param leftActionListener  回退按钮监听
     * @param right               下标题
     * @param rightActionListener 小标题监听
     * @return
     */
    public static TitleBar create(Context context, String title, LeftActionListener leftActionListener, String right, RightActionListener rightActionListener) {
    
    
        return new TitleBar(context, title, right,  true, leftActionListener, rightActionListener);
    }

    /**
     * 初始化
     *
     * @param context             上下文
     * @param title               标题
     * @param right               小标题
     * @param rightTextShow
     * @param leftActionListener
     * @param rightActionListener
     */
    private TitleBar(Context context, String title, String right, boolean rightTextShow, final LeftActionListener leftActionListener, final RightActionListener rightActionListener) {
    
    
        Activity activity = ((Activity) context);
        activity.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
        TextView leftText = activity.findViewById(R.id.leftText);
        TextView titleText = activity.findViewById(R.id.titleText);
        TextView rightText = activity.findViewById(R.id.rightText);
        titleText.setText(title);
        if (null != leftActionListener) {
    
    
            leftText.setOnClickListener(new View.OnClickListener() {
    
    
                @Override
                public void onClick(View v) {
    
    
                    leftActionListener.action(v);
                }
            });
        }
        
        if (rightTextShow) {
    
    
            rightText.setVisibility(View.VISIBLE);
            rightText.setText(right);
            if (null != rightActionListener) {
    
    
                rightText.setOnClickListener(new View.OnClickListener() {
    
    
                    @Override
                    public void onClick(View v) {
    
    
                        rightActionListener.action(v);
                    }
                });
            }
        } else {
    
    
            rightText.setVisibility(View.INVISIBLE);
        }
    }

    /**
     * 左边按钮点击回调事件
     */
    public interface LeftActionListener {
    
    
        void action(View view);
    }

    /**
     * 右边按钮点击回调事件
     */
    public interface RightActionListener {
    
    
        void action(View view);
    }
}

タイトルバー

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/blue">

    <TextView
        android:id="@+id/leftText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:background="@drawable/back" />

    <TextView
        android:id="@+id/titleText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textColor="@color/white"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/rightText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_margin="10dp"
        android:textColor="@color/white"
        android:textSize="20sp" />
</RelativeLayout>
 <color name="blue">#3366FF</color>
 <color name="white">#FFFFFF</color>

画像に戻る
使用する

ステップ1:setContentView(R.layout.XXX)の前に追加します。

 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

ステップ2:ヘッダースタイルを作成する

  <style name="CustomWindowTitleBackground">
        <item name="android:background">@color/blue</item>
    </style>

    <style name="activity_title_style" parent="AppTheme">
        <item name="android:windowNoTitle">false</item>
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    </style>

ステップ3:対応するアクティビティにスタイルを追加する

 <activity
            android:name=".MainActivity"
            android:theme="@style/activity_title_style">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

ステップ4:電話する

  TitleBar.create(this, "标题", new TitleBar.LeftActionListener() {
    
    
            @Override
            public void action(View view) {
    
    
                Toast.makeText(MainActivity.this, "点击后退", Toast.LENGTH_SHORT).show();
            }
        }, "小标题", new TitleBar.RightActionListener() {
    
    
            @Override
            public void action(View view) {
    
    
                Toast.makeText(MainActivity.this, "点击小标题", Toast.LENGTH_SHORT).show();
            }
        });

おすすめ

転載: blog.csdn.net/m0_48440239/article/details/123710669