在Android应用中为不同的屏幕创建一个工具栏

时间:2016-04-19 10:13:55

标签: android xml android-layout

我正在使用app,我在许多屏幕(活动)上使用工具栏,其中包含不同的图像按钮和主标题。为此,我需要为每个屏幕创建.xml以创建工具栏并将其包含在相应屏幕的.xml文件中。我希望我只使用一个.xml文件作为工具栏而不是为每个屏幕创建每个工具栏并编辑它(我的意思是更改标题或添加按钮)以编程方式或在一个.xml中为相关屏幕。有什么办法吗?以下是我的代码。

<?xml version="1.0" encoding="utf-8"?>
<!--Main Activity toolbar-->
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="@color/barColor"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="MAIN ACTIVITY"
        android:textColor="#ffffff"
        android:id="@+id/mytext"
        android:textSize="18sp" />
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:src="@drawable/back"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:scaleType="centerInside"
        android:onClick="GoBack"
        android:background="@null"
        />
</android.support.v7.widget.Toolbar>

主屏幕设计.xml文件,其中包含此工具栏。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#3A3A3B"
    android:orientation="vertical">
    <!--Including the toolbar in main screen here-->
    <include
        android:id="@+id/mainbar"
        layout="@layout/mainactivitytoolbar"
        />
    <TextureView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/scanView"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/mainbar" />
</RelativeLayout>

如果我需要在另一个屏幕上添加一个ImageButton,我需要设置另一个工具栏.xml这样的文件。

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="@color/barColor"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="SECOND ACTIVITY"
        android:textColor="#ffffff"
        android:id="@+id/mytext"
        android:textSize="18sp" />
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:src="@drawable/back"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:scaleType="centerInside"
        android:onClick="Back"
        android:background="@null"
        />
    <!--New Image button added-->
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:src="@drawable/serial"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_gravity="right"
        android:scaleType="centerInside"
        android:background="@null"
        android:onClick="Enter"
        />
</android.support.v7.widget.Toolbar>

2 个答案:

答案 0 :(得分:0)

这可以使用以下解决方案完成。

首先创建toolbar.xml文件,如下所示

<?xml version="1.0" encoding="utf-8"?><!--Main Activity toolbar-->
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:layout_alignParentTop="true"
    android:background="#aa2"
    android:contentInsetLeft="0dp"
    android:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp">

    <TextView
        android:id="@+id/mytext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="MAIN ACTIVITY"
        android:textColor="#ffffff"
        android:textSize="18sp" />



    <LinearLayout
        android:id="@+id/leftIconContainer"
        android:layout_width="wrap_content"
        android:layout_height="25dp"
        android:layout_gravity="left"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:gravity="center_vertical"
        android:orientation="horizontal" />

    <LinearLayout
        android:id="@+id/rightIconContainer"
        android:layout_width="wrap_content"
        android:layout_height="25dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_gravity="right"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:gravity="center_vertical"
        android:orientation="horizontal"/>
</android.support.v7.widget.Toolbar>

然后创建一个BaseActivity,如下所示。

import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by Admin on 4/19/2016.
 */
public class BaseActivity extends AppCompatActivity {
    private View customToolBar;

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }

    @Override
    protected void onResume() {
        super.onResume();

    }

    public void registerToolBar(){
        ActionBar.LayoutParams layout = new ActionBar.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayShowTitleEnabled(false);

        LayoutInflater inflater = LayoutInflater.from(this);
        customToolBar = inflater.inflate(R.layout.toolbar,null);

        actionBar.setCustomView(customToolBar,layout);
        actionBar.setDisplayShowCustomEnabled(true);
        Toolbar parent =(Toolbar) actionBar.getCustomView().getParent();
        parent.setContentInsetsAbsolute(0,0);

    }

    public void addToolBarRightIcon(View view){
        LinearLayout linearLayout = (LinearLayout) customToolBar.findViewById(R.id.rightIconContainer);
        linearLayout.addView(view);
    }

    public void addToolBarLeftIcon(View view){
        LinearLayout linearLayout = (LinearLayout) customToolBar.findViewById(R.id.leftIconContainer);
        linearLayout.addView(view);
    }

    public void changeTitle(String title){
        TextView textView = (TextView) customToolBar.findViewById(R.id.mytext);
        textView.setText(title);
    }

    public int getCorrectSize(float value) {
        Resources r = getResources();
        float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, r.getDisplayMetrics());
        return (int) px;
    }
}

然后当您创建新的Activity 时必须扩展BaseActivity 以及时,必须在setContentView()方法之后调用onCreate()中的registerToolBar()方法。 您可以通过调用addToolBarLeftIcon(在此处传递图片视图)向左添加图标,同样通过调用addToolBarRightIcon(在此处传递图片视图)向右添加图标。请参阅下面的示例。

根据我的例子,我正在创建一个名为Main2Activity的示例活动。

public class Main2Activity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        registerToolBar();
        addIcons();
        changeTitle("Activity 2");
    }


    private void addIcons(){
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(getCorrectSize(25), getCorrectSize(25));
        layoutParams.setMargins(getCorrectSize(8),0,0,0);
        ImageView rightImage = new ImageView(this);
        rightImage.setImageResource(R.mipmap.ic_launcher);
        rightImage.setLayoutParams(layoutParams);
        rightImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(Main2Activity.this, "Right", Toast.LENGTH_SHORT).show();
            }
        });
        addToolBarRightIcon(rightImage);

        layoutParams.setMargins(getCorrectSize(8),0,0,0);
        ImageView leftImage = new ImageView(this);
        leftImage.setImageResource(R.mipmap.ic_launcher);
        leftImage.setLayoutParams(layoutParams);
        leftImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(Main2Activity.this, "Left", Toast.LENGTH_SHORT).show();
            }
        });
        addToolBarLeftIcon(leftImage);
    }
}
祝你好运..

答案 1 :(得分:0)

这是我发现最简单的答案。一个包含您需要的所有图标或按钮的工具,并为其指定相关的ID

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="@color/barColor"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="SECOND ACTIVITY"
        android:textColor="#ffffff"
        android:id="@+id/mytext"
        android:textSize="18sp" />
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:id = "@+id/leftBtn"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:src="@drawable/back"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:scaleType="centerInside"
        android:onClick="Back"
        android:background="@null"
        />
    <!--New Image button added-->
    <ImageButton
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:id = "@+id/rightBtn"
        android:src="@drawable/serial"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_gravity="right"
        android:scaleType="centerInside"
        android:background="@null"
        android:onClick="Enter"
        />
</android.support.v7.widget.Toolbar>

然后在您的主要活动中,隐藏您不需要的内容。您也可以在同一个地方放置尽可能多的图标。:)

public class MainActivity extends AppCompatActivity {

    private ImageButton rightBtn,crossBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.nbe_startqr);

        //Hide right button on toolbar
        rightBtn = (ImageButton)findViewById(R.id.righBtn);
        rightBtn.setVisibility(View.GONE);

        crossBtn = (ImageButton)findViewById(R.id.leftBtn);
        crossBtn.setVisibility(View.VISIBLE);

    }
    public void Back(View view)
    {
       //Your code here
    }
    public void Enter(View view)
    {
       //Your code here
    }