美文网首页Android问题汇总(遥远的回忆过去)
Android - ConstraintLayout做内容占位(

Android - ConstraintLayout做内容占位(

作者: MonkeyLei | 来源:发表于2019-08-19 09:36 被阅读1次

    最近重构工程,想把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)有必要了解下了...一直再用,就是没看过,我擦勒!

    相关文章

      网友评论

        本文标题:Android - ConstraintLayout做内容占位(

        本文链接:https://www.haomeiwen.com/subject/kpwjsctx.html