您的位置:首页 > 其它

## 抽取BaseActivity解放你的titlebar ##

2017-06-13 12:20 162 查看
当项目过大的时候 往往需要多个Activity 为了避免每次重复写的title 我们将其抽取出来

需要的XML布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/base_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="true"
android:fitsSystemWindows="true"
android:orientation="vertical" >

<RelativeLayout
android:id="@+id/base_titlebar"
android:layout_width="match_parent"
android:layout_height="50dp" >

<ImageButton
android:id="@+id/base_back_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="10dp"
android:background="@null"
android:src="@mipmap/ic_launcher" />

<TextView
android:id="@+id/base_menu_btn"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="10dp"
android:gravity="center"
android:layout_centerVertical="true"
android:background="@null"
android:text="设置"
android:textSize="16sp" />

<TextView
android:id="@+id/base_title_tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="标题"
android:textColor="#ffffff"
android:textSize="20sp" />
<View android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true" />
</RelativeLayout>

<FrameLayout
android:id="@+id/base_contentview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>

</LinearLayout>


BaseActivity

public abstract class BaseActivity extends Activity{

public ViewGroup contentView;
private TextView rightBtn;
private View leftBtn;
private TextView titltTv;
private View titlebar;
@SuppressLint("InlinedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setTranslucentStatus();

int titlebarResId = getTitlebarResId();
if (titlebarResId!=0) {
LinearLayout view=(LinearLayout) findViewById(R.id.base_view);
view.removeViewAt(0);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,50);
ViewGroup titleView=(ViewGroup) View.inflate(this, titlebarResId, null);
view.addView(titleView, 0,lp);
view.setBackgroundDrawable(titleView.getBackground());
titlebar=titleView;
}else {
titlebar=findViewById(R.id.base_titlebar);
leftBtn = findViewById(R.id.base_back_btn);
leftBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
onClickLeft();
}
});
rightBtn = (TextView) findViewById(R.id.base_menu_btn);
rightBtn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
onClickRight();
}
});
titltTv=(TextView) findViewById(R.id.base_title_tv);
}

contentView=(ViewGroup) findViewById(R.id.base_contentview);
contentView.addView(View.inflate(this, getContentView(), null));
setRightBtnVisible(false);

}

@Override
public void overridePendingTransition(int enterAnim, int exitAnim) {
super.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}

/**
* 设置状态栏背景状态
*/
private void setTranslucentStatus()
{
//判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

}

/**
* 点击左侧按钮
* 默认是退出
*/
protected void onClickLeft() {
finish();
}

/**
* 点击右侧按钮
* 默认什么都不做
*/
protected void onClickRight() {

}

/**
* 设置左侧按钮显示与隐藏
* @param visible
*/
public void setLeftBtnVisible(Boolean visible) {
if (leftBtn!=null) {
if (visible) {
leftBtn.setVisibility(View.VISIBLE);
}else{
leftBtn.setVisibility(View.GONE);
}
}

}

/**
* 设置右侧按钮显示与隐藏
* @param visible
*/
public void setRightBtnVisible(Boolean visible) {
if (rightBtn!=null) {
if (visible) {
rightBtn.setVisibility(View.VISIBLE);
}else{
rightBtn.setVisibility(View.GONE);
}
}

}

/**
* 获取自定义标题栏
* 如果子类复写并返回不等于0的布局文件,将会覆盖默认标题
* 返回0 将会采用默认标题
* @return
*/
protected int getTitlebarResId() {
return 0;
}

/**
* 设置中间标题
* @param title
*/
public void setTitle(String title){
if (titltTv!=null) {
if (titltTv!=null) {
titltTv.setText(title);
}
}
}

/**
* 设置右边你按钮文字属性
* @param title
*/
public void setRtTitle(String title){
if (rightBtn!=null) {
rightBtn.setText(title);
}
}

public View getTitleBar(){

return titlebar;
}

/**
* 获取中间内容显示区
* @return
*/
protected abstract int getContentView();

}


3.简单的应用

public class MainActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setTitle("主页");
setRtTitle("设置");
setRightBtnVisible(true);
}
@Override
protected int getContentView() {
return R.layout.activity_main;//任意非空布局
}

@Override
protected void onClickRight() {
Toast.makeText(this, "设置", 0).show();;
}
}


效果如下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: