包含的布局 - >如何填充

时间:2015-03-24 09:18:28

标签: java android xml layout include

我在除LoginActivity区域之外的每个活动的每个布局中都包含了一个menu_bar.xml。

我需要在leftside中使用realName填充menu_bar并接收消息。

如何填充textView以便将数据保存在所有其他活动中?

我尝试制作一个BaseActivity并在其他活动中扩展它,但只填充一次,在其他活动中返回到textView的默认值。

public class BaseActivity extends Activity {
XApplication xApplication;
TextView realName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    xApplication=(XApplication)getApplication();
    setContentView(R.layout.menu_bar);
    realName=(TextView)findViewById(R.id.realName);
    realName.setText(Preferences.getInstance().getString(Constants.REAL_NAME,""));

}

}

enter image description here

1 个答案:

答案 0 :(得分:0)

为基本活动创建公共布局。然后使用您想要使用的标记在所有布局中包含该布局。

之后创建一个抽象活动,然后处理此活动中按钮和代码的所有单击,然后在包含基本布局的所有其他活动中扩展此活动。

例如

常用按钮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关键字扩展活动中的Base活动。例如

public class MyActivity extends BottomBar

注意:从子活动中,您必须调用基类的super方法来处理基本布局的常用控件的单击。

因此,您可以在单个活动中实现多个通用布局。

希望这会对你有所帮助。享受!!

信用:How to create a generic Android XML layout for all activities