Создайте общий макет для своей базовой деятельности. а затем включите этот макет во все макеты, используя тег, который вы хотите сделать одинаковым.
После этого создайте одно абстрактное действие, а затем обработайте все нажатия кнопок и кода в этом действии, а затем расширите это действие во всех других действиях, в которые вы включили базовый макет.
Например
макет общих кнопок xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/tabhost_bg"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="3">
<Button
android:id="@+id/btnHome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bottom_btn_active"
android:layout_weight="1"
android:text="@string/label_home"
style="@style/bottom_tab_btn"/>
<Button
android:id="@+id/btnSetting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bottom_btn_active"
android:layout_weight="1"
android:text="@string/label_settings"
style="@style/bottom_tab_btn"/>
<Button
android:id="@+id/btnMore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bottom_btn_active"
android:layout_weight="1"
android:text="@string/label_more"
style="@style/bottom_tab_btn"/>
</LinearLayout>
Вот макет xml, в который вы можете включить вышеуказанный файл XML.
<include
android:id="@+id/bottombar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/bottom_bar" />
Здесь android:layout_width и android:layout_height и layout являются обязательными атрибутами.
Теперь вот базовая активность, которая обрабатывает щелчок общих элементов управления.
public abstract class BottomBar extends Activity implements OnClickListener {
protected Button btnHome;
Button btnSetting, btnMore;
private Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = this;
}
protected void mappingWidgets() {
btnHome = (Button) findViewById(R.id.btnHome);
btnSetting = (Button) findViewById(R.id.btnSetting);
btnMore = (Button) findViewById(R.id.btnMore);
btnHome.setOnClickListener(this);
btnSetting.setOnClickListener(this);
btnMore.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == null)
throw new NullPointerException(
"You are refering null object. "
+ "Please check weather you had called super class method mappingWidgets() or not");
if (v == btnHome) {
} else if (v == btnSetting) {
}else if(v == btnMore) {
}
}
protected void handleBackgrounds(View v) {
if (v == btnHome) {
btnHome.setBackgroundResource(R.drawable.bottom_btn_hover);
btnSetting.setBackgroundResource(R.drawable.bottom_btn_active);
btnMore.setBackgroundResource(R.drawable.bottom_btn_active);
} else if (v == btnSetting) {
btnHome.setBackgroundResource(R.drawable.bottom_btn_active);
btnSetting.setBackgroundResource(R.drawable.bottom_btn_hover);
btnMore.setBackgroundResource(R.drawable.bottom_btn_active);
} else if (v == btnMore) {
btnHome.setBackgroundResource(R.drawable.bottom_btn_active);
btnSetting.setBackgroundResource(R.drawable.bottom_btn_active);
btnMore.setBackgroundResource(R.drawable.bottom_btn_hover);
}
}
}
Теперь остался один шаг, чтобы распространить эту базовую активность на все ваши активности.
Вы можете расширить действие Base в действии, используя ключевое слово extends. Например
public class MyActivity extends BottomBar
Примечание. Из дочерней активности вы должны вызвать суперметод базового класса, чтобы обработать щелчок общих элементов управления вашего базового макета.
Таким образом, вы можете реализовать несколько общих макетов в рамках одного действия.
Надеюсь, что это поможет вам. Наслаждаться!!
ПРЕДОСТАВЛЕНИЕ: Как создать общий XML-макет Android для всех видов деятельности
24.03.2015