Android问题汇总(遥远的回忆过去)

Android - ConstraintLayout做内容占位(

2019-08-19  本文已影响1人  MonkeyLei

最近重构工程,想把BaseActivity, BaseFragment封装到更好,更集中管理一些。目前还比较可以,也将权限管理封装到了基础页面,采用的是官方的easypermissions库,还不错!官方的足够用了。

然后像基础页面增加标题栏,内容区域的自定义处理。BaseActivity则默认提供统一标题栏样式,图标点击给回调即可。可以选择不显示标题栏。

然后就想着这样:

activity_base.xml

  <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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.support.constraint.ConstraintLayout
        android:id="@+id/ab_titleRoot"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@+id/ab_settingBack"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:scaleType="centerCrop"
            android:src="@drawable/shareicon"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <ScrollView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:scrollbarStyle="outsideOverlay"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/ab_right"
            app:layout_constraintStart_toEndOf="@+id/ab_settingBack"
            app:layout_constraintTop_toTopOf="parent">

            <TextView
                android:id="@+id/ab_title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="6dp"
                android:layout_marginRight="6dp"
                android:ellipsize="end"
                android:gravity="center"
                android:singleLine="true"
                android:text="标题标题标题标题标题标题标题标题"
                android:textColor="@color/text_color"
                android:textSize="22sp" />
        </ScrollView>

        <ImageView
            android:id="@+id/ab_right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:scaleType="centerCrop"
            android:src="@drawable/shareicon"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </android.support.constraint.ConstraintLayout>

    <android.support.constraint.ConstraintLayout
        android:id="@+id/ab_contentRoot"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorPrimaryDark"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ab_titleRoot" />
</android.support.constraint.ConstraintLayout>

上标题,下内容

image

然后基础页面想着如下处理:

image

分开看貌似布局都没问题。。。但是.....

activity_main.xml - 当这个布局被加载的时候:

  <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".app.MainActivity">

    <android.support.constraint.ConstraintLayout
        android:id="@+id/am_fragmentContent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/am_bottomNavBar"
        app:layout_constraintTop_toTopOf="parent" />

    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/am_bottomNavBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>
image

运行发现出问题了啦:

image

然后就看布局,感觉没问题呀。。。怎么回事了。。是第三方框架可能存在的特殊情况?感觉不像,我都是约束布局,理论上都处理好了呀。怎么会出现这种情况呢?

然后早上来,我想着改成FrameLayout做内容占位ViewGroup, 内容布局都添加到这个里面。

   <FrameLayout
        android:id="@+id/ab_contentRoot"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorPrimaryDark"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/ab_titleRoot" />
image

目前是搞定了。

接下来要做的事情是,尝试去分析一下,是什么导致了这种情况???

网友比较热心,发现了构建布局参数的问题,如下:

image

我们既然选择约束布局作为占位,那我们创建内容布局的时候则需要这个root

作为约束的要素!很nice呀....并且最后一个参数(第三个参数)也要填写 true,这样父布局的宽高约束就会正常了!否则就死丢丢了...

看来View.inflate和LayoutInflater.inflate(need to do)有必要了解下了...一直再用,就是没看过,我擦勒!

上一篇下一篇

猜你喜欢

热点阅读