我正在使用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>
答案 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
}