属性应用程序的不可理解的行为:高程

时间:2019-02-27 13:08:42

标签: android

我想知道为什么app属性中这样奇怪的行为:levation =“ 0dp”以及如何解决问题。我使用androidx库。工具栏是透明的。阴影依然存在。当我编写一个应用程序时:海拔=“ 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>

fragment.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();
            }
        } );
    }
}

2 个答案:

答案 0 :(得分:0)

尝试使用以下代码段代替toolbar.setNavigationOnClickListener

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

希望这可以解决您的问题。 谢谢

答案 1 :(得分:0)

这仅仅是因为您使用了 FrameLayout 作为父级,并且还从 AppBarLayout 删除了海拔高度 ,因此,您的 ScrollView AppBarLayout 重叠,因为它写在 AppBarLayout 下面。将您的根更改为其他名称,例如。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

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


    </com.google.android.material.appbar.AppBarLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/appBarLayout">

    </ScrollView>

</RelativeLayout>