您的位置:首页 > 移动开发 > Android开发

android 快速开发(三)巧用公共标题栏:避免每次activity都得写标题栏

2016-01-07 16:00 525 查看

巧用公共标题栏:避免每次activity都得写标题栏

注:采用父类继承法避免每次建activity都得include标题栏并初始化标题栏各个操作

先看下MainActivity代码和xml:
package com.yqy.yqy_commontitlebar;

import android.view.View.OnClickListener;

public class MainActivity extends CommonActivity {

@Override
public void init() {
setTitleAndContentLayoutId("首页", R.layout.activity_main);
}

@Override
public OnClickListener getBackOnClickLisener() {
return null;
}

}

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

</RelativeLayout>


代码简洁,并且有设置标题栏文字、标题栏以为的布局和随心所欲的返回事件
这些都归功于CommonActivity:
package com.yqy.yqy_commontitlebar;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.TextView;

public abstract class CommonActivity extends FragmentActivity {

private TextView leftTv, centerTv, rightTv;

@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.common_title_bar);
leftTv = (TextView) findViewById(R.id.leftTv);
centerTv = (TextView) findViewById(R.id.centerTv);
rightTv = (TextView) findViewById(R.id.rightTv);

if (getBackOnClickLisener() == null) {
leftTv.setOnClickListener(new BackOnClickLisener());
} else {
leftTv.setOnClickListener(getBackOnClickLisener());
}

init();
}

/**
* 设置标题和主布局
* @author yqy
* @date 2016-1-7 下午3:44:55
* @param title
* @param layoutId
*/
public void setTitleAndContentLayoutId(String title, int layoutId) {
getLayoutInflater().inflate(layoutId,
(ViewGroup) centerTv.getParent().getParent());
centerTv.setText(title);
}

public abstract void init();

public abstract OnClickListener getBackOnClickLisener();

class BackOnClickLisener implements OnClickListener {

@Override
public void onClick(View arg0) {
finish();
}

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
leftTv.performClick();
return true;
}
return super.onKeyDown(keyCode, event);
}

}


OnCreare方法初始化标题栏布局和点击事件
setTitleAndContentLayoutId(String title, int layoutId)用来设置标题栏的标题文字和主要布局
有两个方法前面带有 public abstract 修饰符目的是让子类复写这些  父类调用

标题栏布局贴上:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp" >

<TextView
android:id="@+id/leftTv"
android:layout_width="40dp"
android:layout_height="35dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="返回" />

<TextView
android:id="@+id/centerTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="标题"
android:textSize="20sp" />

<TextView
android:id="@+id/rightTv"
android:layout_width="40dp"
android:layout_height="35dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="编辑" />
</RelativeLayout>

<View android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@android:color/background_dark"/>

</LinearLayout>


以上的例子虽然都是文字的按钮  根据自己的需要稍加改动就可以

最后大喊一声:开源万岁!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: