首页 > 解决方案 > 属性 app:elevation 的不可理解行为

问题描述

我想知道为什么 app 属性中出现这种奇怪的行为:elevation = "0dp" 以及如何解决问题。我使用 androidx 库。工具栏是透明的。影子还在。当我编写一个应用程序时:elevation = "0dp",阴影消失了,但工具栏按钮,包括“后退”按钮,停止响应。

我试图以其他方式解决它:android: elevation = "0dp"

以编程方式设置getSupportActionBar (). setElevation (0);没有帮助。

布局:

   <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 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="match_parent"
        android:background="@color/back_gray">

        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="200dp"/>

        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/transparent"
            android:theme="@style/AppTheme.AppBarOverlay">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="wrap_content"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/transparent"
                app:popupTheme="@style/AppTheme.PopupOverlay">
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <ImageButton
                        android:id="@+id/iv_like"
                        android:layout_width="48dp"
                        android:layout_height="48dp"
                        android:background="@android:color/transparent"
                        android:src="@drawable/heart_outline"
                        android:visibility="visible"/>

                    <ImageButton
                        android:id="@+id/iv_shared"
                        android:layout_width="48dp"
                        android:layout_height="48dp"
                        android:background="@android:color/transparent"
                        android:src="@drawable/shared"
                        android:visibility="visible" />
                </LinearLayout>

            </androidx.appcompat.widget.Toolbar>
        </com.google.android.material.appbar.AppBarLayout>
 <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">


            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
              .....>

                <TextView
                  ........./>

                <TextView
                 ........../>

            </RelativeLayout>
        </LinearLayout>
    </ScrollView>

</FrameLayout>

片段.java:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate( R.layout.fragment_data, container, false );
    toolbar = (Toolbar) rootView.findViewById( R.id.toolbar );
    MainActivity activity = (MainActivity) getActivity();

    if ( activity != null ) {
        activity.setSupportActionBar( toolbar );
        //  activity.getSupportActionBar().setElevation(0);
        activity.getSupportActionBar().setDisplayHomeAsUpEnabled( true );
        activity.getSupportActionBar().setHomeButtonEnabled( true );
        activity.getSupportActionBar().setDisplayShowTitleEnabled( false );

        toolbar.setNavigationOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().onBackPressed();
            }
        } );
    }
}

标签: android

解决方案


试试下面的代码片段,而不是toolbar.setNavigationOnClickListener

@Override public boolean onOptionsItemSelected(MenuItem item) {
      if(item.getItemId() == android.R.id.home){
          getActivity().onBackPressed();
      }
      return super.onOptionsItemSelected(item);
   }

希望这能解决你的问题。谢谢


推荐阅读