之前写过一篇关于自定义标题的文章,但使用起来还是不方便,尤其是和MVP框架结合的时候。所以这次再写一篇可以与MVP框架结合的。之后相关的文章也会更新。
TitleBar
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);
}
}
title_bar
<?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>
使用
第一步:在setContentView(R.layout.XXX)之前添加。
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
第二步:创建标题样式
<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>
第三步:给相应的activity添加样式
<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>
第四步:调用
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();
}
});