2016-04-19 5 views
1

私は、さまざまな画像ボタンとメインタイトルを持つ多くの画面(アクティビティ)でツールバーを使用しているアプリで作業しています。このためには、ツールバーを作成し、それを対応する画面の.xmlファイルに含めるために、すべての画面に.xmlを作成する必要があります。私は、各スクリーンの各ツールバーを作成せずに、ツールバーに1つの.xmlファイルのみを使用して、関連する画面用にプログラムでも1つの.xmlでも編集(タイトルの変更またはボタンの追加を意味します)します。何か方法はありますか?以下は私のコードです。Androidアプリの異なる画面用に1つのツールバーを作成する

<?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> 

私は1つ以上の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

ツールバーのタイトルのためにあなたがプログラムでそれを変更し、アイコンの1ツールバーのすべてのアイコンを作成し、あなたの要求に応じてオン/オフ彼らの表示を切り替えることができます –

+0

しかし、私はツールバーの同じ場所(右コーナー)でアイコンが必要です、それはまだ可能ですか? – WasimSafdar

+1

はい、その場合は 'Toolbar'ではなく' Relative layout'を使用する必要があります –

答えて

0

これは、以下の解決策を使用して行うことができます。

まずすると、以下のようBaseActivityを作成

<?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> 

以下のようにtoolbar.xmlファイルを作成します。

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; 
    } 
} 

そしてあなたはBaseActivityを拡張し、またあなたがsetContentView()メソッド後)のonCreate()メソッド(registerToolBarを呼び出す必要があります必要があります新しいアクティビティを作成。 と同様の方法でをaddToolBarLeftIcon(画像ビューをここに渡す)を呼び出すことによって左にアイコンを追加することができます。を呼び出すことによってアイコンを右に追加します。以下の例を参照してください。

私の例では、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); 
    } 
} 

幸運..

+0

ありがとうございます、あなたのソリューションは正しいですが、私はさらに簡単な解決策を見つけました。下の私の答えをチェックしてください。 – WasimSafdar

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 
    } 
+0

このソリューションを使用して、ツールバーの左側または右側に別の画像ボタンを追加するにはどうすればよいですか? – TdSoft

+0

別の画像を同じ場所に配置する場合は、同じパラメータを使用して追加してください。 idだけを変更してください。 xmlでは、イメージボタンをイメージボタンの右または左に移動して、置き換えることができます。しかし、コードを実行すると、コードが正しい場所に移動します。 – WasimSafdar

+0

OK ..しかし私のソリューションでは、いつでもxmlファイルを編集する必要はなく、右側の左側に動的にビューを動的に追加することもできます。あなたがしなければならないことは、ImageViewをaddToolBarRightIcon()メソッドまたはaddToolBarLeftIcon()メソッドに渡すことです。 – TdSoft

関連する問題