筆者近期在做項目時遇到了如下情況:有**超過10個**的子界面需要用到差不多的一個標題欄,如下圖:

倘若直接在每個布局文件中寫一個這樣的Linearlayout,一方面重復性的代碼總是讓人不太舒服,另一方面,我需要對同樣的一個**返回鍵**在不同的布局中定義不同的id,然后還要在java文件中實現它的功能,實在是太讓人不爽了。
于是,筆者就想到了**自定義布局**。
**自定義布局**的好處就是在布局定義好之后,直接可以在布局文件中使用,如下圖:

? ? ? ? ??
不過由于每個布局的特殊性,所以還是需要一個方法——**設置textview的內容**,此處也是直接可以在代碼中實現。
上一下項目文件:

MainActivity:
~~~
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,TwoActivity.class);
startActivity(intent);
//此處千萬外要注意,不要寫finish(),在TwoActivity中按下返回鍵之后會摧毀TwoActivity的布局,
//然后顯示的就是MainActivity的布局,倘若把MainActivity的布局給finnish掉后,程序會直接退出
}
});
}
}
~~~
TwoActivity:
~~~
import android.app.Activity;
import android.os.Bundle;
public class TwoActivity extends Activity{
private TitleLayout title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_two);
//綁定TitleLayout
//設置TitleLayout中text內容
title=(TitleLayout)findViewById(R.id.title);
title.setTitleText("Light_Control");
}
}
~~~
TitleLayout:
~~~
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
public class TitleLayout extends LinearLayout {
private Button titleBack;
private TextView titleText;
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
//加載布局文件,與setContentView()效果一樣
LayoutInflater.from(context).inflate(R.layout.my_view, this);
titleBack = (Button) findViewById(R.id.title_back);
titleText = (TextView) findViewById(R.id.title_text);
//設置返回鍵的點擊效果
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) getContext()).finish();
}
});
}
//創建一個方法來改變title中text的內容
public void setTitleText(String text) {
titleText.setText(text);
}
}
~~~
activity_main:
~~~
<?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"
>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="這是第一個Activity"
android:textSize="30sp"
android:gravity="center"/>
</LinearLayout>
~~~
activity_two:
~~~
<?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">
<com.example.user_defined_view.TitleLayout
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.example.user_defined_view.TitleLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="這是第二個Activity"
android:textSize="30sp"/>
</LinearLayout>
~~~
my_view:
~~~
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:background="#272727">
<Button
android:id="@+id/title_back"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_gravity="center_vertical"
android:background="@drawable/button_back"/>
<TextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a Title"
android:padding="12dp"
android:layout_gravity="center_vertical"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#fff"/>
</LinearLayout>
~~~
最后附上源碼地址:[http://download.csdn.net/detail/double2hao/9334387](http://download.csdn.net/detail/double2hao/9334387)
- 前言
- android SharedPreference的簡單使用(登陸界面記住密碼)
- android 通知Notification的使用小實例(振動,燈光,聲音)
- android調用攝像頭拍照,從相冊中選擇照片并裁剪
- android從相冊中獲取圖片出錯,圖片無法裁剪的問題
- android 后臺定時提醒(Service,AlarmManager的使用)
- android如何讓后臺服務service不被殺死(設置前臺服務)
- android修改控件外觀(使用drawable資源)
- android 自定義view的使用(最佳demo——返回標題欄)
- android viewpager+fragment做主界面(超容易理解的demo!)
- Fragment生命周期
- Android DrawerLayout 高仿QQ5.2雙向側滑菜單
- Android DrawerLayout側滑菜單+nineoldandroids動畫
- Android 通知欄Notification的整合 全面學習 (一個DEMO讓你完全了解它)
- Android應用開發-護眼提醒-總結篇