布局共享(列如所有activity擁有相同的布局部分,比如actionbar,在BaseActivity中寫入布局)


有時候界面上會用到統一的布局,比如toolbar,你可能會想到在用到的地方都去加上toobar這樣對於程序的開發與維護來說都顯得特別麻煩,我們可以將他寫在父類中。

首先創建一個BaseActivity,MainActivity繼承BaseActivity。通過重寫setContentView和將子布局和父布局add到同一布局中的方式來實現。代碼如下:

1.BaseActivity布局->layout_baseactivity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="chan.joker.sharecontentview.BaseActivity"
    android:orientation="vertical"
    android:gravity="center"
    android:background="#0000c6"
    android:padding="10dp"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ShareContentView"
        android:textColor="#00ff00"
        />

</LinearLayout>

2.BaseActivity---- 紅色部分為實現代碼

/**
 * 父類activity
 *
 * @author joker.chan
 * @version 1.0
 * @since 2015年5月14日 09:04:42
 */
public class BaseActivity extends Activity {

    private LinearLayout parentLinearLayout;//把父類activity和子類activity的view都add到這里


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initContentView(R.layout.layout_baseactivity);
    }

    /**
     * 初始化contentview
     */
    private void initContentView(int layoutResID) {
        ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.content);
        viewGroup.removeAllViews();
        parentLinearLayout = new LinearLayout(this);
        parentLinearLayout.setOrientation(LinearLayout.VERTICAL);
        viewGroup.addView(parentLinearLayout);
        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true); }

    @Override public void setContentView(int layoutResID) {

        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);

    }

    @Override
    public void setContentView(View view) {

        parentLinearLayout.addView(view);
    }

    @Override
    public void setContentView(View view, ViewGroup.LayoutParams params) { parentLinearLayout.addView(view, params); }


}

3.MainActivity布局->activity_main

<FrameLayout 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:background="#ff0000"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/hello_world"
        android:textSize="16sp"
        android:textColor="#ffffff" />

</FrameLayout>

4.MainActivity

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}

界面效果圖如下:其中藍色部分為統一界面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM