Android工具栏自定义布局元素点击事件

时间:2016-07-20 06:29:00

标签: android android-toolbar

我为项目创建了一个自定义工具栏。工具栏工作正常并显示。这是工具栏的代码

toolbar.xml          

    android:elevation="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="8"
        android:weightSum="8">

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:layout_gravity="center_vertical">

            <ImageView
            android:id="@+id/imageToolbal"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:src="@drawable/alert_on"
            android:layout_weight="4"/>

            <TextView
            android:id="@+id/textToolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test"
            android:layout_weight="4"/>

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.Toolbar>

主要活动的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.example.app.MainActivity">

    <include layout="@layout/toolbar" />

</RelativeLayout>

在代码的onCreate方法中,我设置了像这样的工具栏

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    } 

它按预期显示,但我无法触发工具栏中布局的点击事件。就像我想要显示Toast,如果点击工具栏中textView的ID为textToolbar,或者我想隐藏并有条件地显示它。我该怎么办?

4 个答案:

答案 0 :(得分:0)

像这样的工具栏操作。

       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        // Title and subtitle
        toolbar.setTitle(R.string.about_toolbar_title);
        toolbar.setSubtitleTextColor(Color.WHITE);
        toolbar.setTitleTextColor(Color.WHITE);
        toolbar.setBackgroundColor(getResources().getColor(
                R.color.themeToolbarColor));
        toolbar.setNavigationIcon(R.drawable.ic_action_back);
        toolbar.setNavigationOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
               // finish();
            }
        });
        toolbar.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });

答案 1 :(得分:0)

您可以按如下方式获取工具栏textview:

  TextView textToolbar= (TextView)toolbar.findViewById(R.id.textToolbar);

  textToolbar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

         // YOUR TOAST HERE
        }
    });

隐藏并显示如下:

    if(YOUR_CONDITION){
       textToolbar.setVisibility(View.VISIBLE);
    }else{
       textToolbar.setVisibility(View.GONE);
    }

答案 2 :(得分:0)

您只需为要点击的xml分配onClick textView个事件,然后在Activity中实现该事件。

xml就像,

<TextView
            android:id="@+id/textToolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test"
            android:onclick="test"
            android:layout_weight="4"/>

,实现onclick事件的方法是,

public void test(View V){
   //onclick event statement
}

答案 3 :(得分:0)

//更改&#34; res / styles.xml&#34;

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

//活动

public class MainActivity extends AppCompatActivity {

Toolbar mToolbar;
TextView txtToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mToolbar = (Toolbar) findViewById(R.id.toolBar);
    //textView inside toolbar
    txtToolbar = (TextView) findViewById(R.id.txtToolbar);
    setSupportActionBar(mToolbar);
}

@Override
protected void onResume() {
    super.onResume();
    txtToolbar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("Toolbar Item","TxtClicked");
        }
    });
}

}

//工具栏

<android.support.v7.widget.Toolbar
    android:id="@+id/toolBar"
    android:background="@color/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/txtToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ToolBar TextView"/>
</android.support.v7.widget.Toolbar>