Android不会使用不同的屏幕布局来调整大小

时间:2019-08-05 14:48:54

标签: java android android-layout android-screen-support

我正在尝试根据使用的设备来调整布局的大小。 我正在两种不同的手机(三星Galaxy S8 +和索尼Xperia Z2(甚至是两个不同的模拟器))上进行测试。

我已经在清单文件中添加了一些代码。 我用正确的名称(假设是)(布局,较小的布局,较大的布局,较大的布局)创建了不同的文件夹。 我将代码放入values文件夹中,文件为“ dimens.xml”,并从布局中调用它。 但是似乎没有任何效果。

我唯一的屏幕更改是在将相应文件修改到“布局”文件夹中时。

我很乐意提供任何帮助或建议。谢谢!

我已经阅读了很多有关Android Developer和Stack Overflow的文档,但似乎找不到解决方法。

AndroidManifest.xml的片段

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.applicationpro">

    <supports-screens android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"
        android:resizeable="true" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />

res / layout-large / my_layout.xml的代码段


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainLL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg4"
    android:orientation="vertical"
    tools:context=".activity.LoginActivity">

    <ProgressBar
        android:id="@+id/loginPG"
        android:theme="@style/FragmentsProgressBar"
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:layout_marginTop="100dp"/>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/loginTIY"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/margin_top_large">

            <AutoCompleteTextView
                android:id="@+id/loginTV"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/prompt_login"
                android:maxLines="1"
                android:singleLine="true" />
        </android.support.design.widget.TextInputLayout>

dimens.xml


<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
    <dimen name="standard_55">65dp</dimen>
    <dimen name="standard_105">135dp</dimen>
    <dimen name="standard_155">155dp</dimen>

    <!-- Small Dimensions = "Medium Dimensions * 0.75" For Example: 210*.75 = 157.5-->
    <dimen name = "margin_top_small">150dp</dimen>

    <!-- Medium Dimensions -->
    <dimen name = "margin_top_medium">200dp</dimen>


    <!-- Large Dimensions = "Medium Dimensions * 1.5" For Example: 210*1.5 = 315 -->
    <dimen name = "margin_top_large">300dp</dimen>


    <!-- XLarge Dimensions = "Medium Dimensions * 2" For Example: 210*1.5 = 420 -->
    <dimen name = "margin_top_xLarge">400dp</dimen>

</resources>

1 个答案:

答案 0 :(得分:2)

TL; DR  这是使用ConstraintLayout的另一种方法,而不是针对每个屏幕尺寸都使用单一布局


您可以使用ConstraintLayout支持不同的屏幕尺寸:

  

ConstraintLayout允许您使用平面视图层次结构(无嵌套视图组)创建大型且复杂的布局。它与RelativeLayout的相似之处在于,所有视图都是根据同级视图和父级布局之间的关系进行布局的,但是它比RelativeLayout更加灵活,并且更易于在Android Studio的布局编辑器中使用。

您可以使用这些属性以百分号指定视图大小:

app:layout_constraintWidth_percent=".5"
app:layout_constraintHeight_percent=".5"

例如,单个按钮的高度和宽度均等于屏幕的50%:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">


<Button
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintWidth_percent=".5"
    app:layout_constraintHeight_percent=".5"/>

</androidx.constraintlayout.widget.ConstraintLayout>

它看起来像这样:

enter image description here

我建议您将ConstraintLayoutguidelinesChains结合使用以支持不同的屏幕尺寸(除了我上面提到的-app:layout_constraintWidth_percentapp:layout_constraintHeight_percent


乍看之下,这看起来可能需要做很多工作,有些人可能会怀疑这是否值得付出努力,但这就是为什么我认为ConstraintLayout是构建UI的正确方法的原因:

  • 这真的很用户友好。

  • ConstraintLayout非常简单易学。

  • 一旦您了解了它,就会发现您节省了大量的开发时间,因为使您的UI变得非常快。

  • 约束布局旨在支持不同的屏幕尺寸,因此无需为每个屏幕尺寸都构建一个布局(这也与以前的优势节省了开发时间)。