我正在尝试根据使用的设备来调整布局的大小。 我正在两种不同的手机(三星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>
答案 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>
它看起来像这样:
我建议您将ConstraintLayout与guidelines和Chains结合使用以支持不同的屏幕尺寸(除了我上面提到的-app:layout_constraintWidth_percent
和app:layout_constraintHeight_percent
)
乍看之下,这看起来可能需要做很多工作,有些人可能会怀疑这是否值得付出努力,但这就是为什么我认为ConstraintLayout是构建UI的正确方法的原因:
这真的很用户友好。
ConstraintLayout非常简单易学。
一旦您了解了它,就会发现您节省了大量的开发时间,因为使您的UI变得非常快。
约束布局旨在支持不同的屏幕尺寸,因此无需为每个屏幕尺寸都构建一个布局(这也与以前的优势节省了开发时间)。