android支持不同的分辨率与布局文件夹

时间:2018-11-14 10:53:44

标签: android android-studio android-layout android-fragments android-intent

我正在为应用程序创建布局,但问题是布局在所有大型设备上都是完美的,但不适用于hdpi。因此,我认为要为布局分别创建hdpi文件夹。我选择android资源目录,并选择密度作为hdpi,但不适用于仅hdpi设备。我也尝试过尺寸和屏幕宽度,但不起作用。您能帮我改善一下吗?

布局代码

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary">


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/combine_bg"
        android:layout_marginTop="@dimen/dp20"
        android:layout_marginBottom="@dimen/dp20"
        android:layout_marginRight="@dimen/dp20">


        <TextView
            android:id="@+id/txtWelcomeTo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/welcome_to"
            android:layout_marginTop="@dimen/dp170"
            android:layout_marginLeft="@dimen/dp10"
            android:textSize="@dimen/dp15"
            android:textColor="@android:color/black" />


        <TextView
            android:id="@+id/txtPrivateCare"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/the_private_care_masters"
            android:layout_marginLeft="@dimen/dp10"
            android:textStyle="bold"
            android:textColor="@android:color/black"
            android:layout_below="@id/txtWelcomeTo" />


        <EditText
            android:id="@+id/etemail"
            android:layout_width="@dimen/dp190"
            android:layout_height="wrap_content"
            android:layout_below="@id/txtPrivateCare"
            android:layout_marginLeft="@dimen/dp10"
            android:hint="@string/email_phone"
            android:layout_marginTop="@dimen/dp20" />


        <EditText
            android:id="@+id/etPassword"
            android:layout_width="@dimen/dp190"
            android:layout_height="wrap_content"
            android:layout_below="@id/etemail"
            android:layout_marginLeft="@dimen/dp10"
            android:layout_marginTop="@dimen/dp10"
            android:hint="@string/password"

            />


        <ImageButton
            android:id="@+id/loginButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/login_btn"
            android:background="@android:color/transparent"
            android:layout_below="@id/etemail"
            android:layout_marginLeft="@dimen/dp25"
            android:layout_toRightOf="@id/etemail" />


        <CheckBox
            android:id="@+id/chkRememberMe"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/etPassword"
            android:layout_marginLeft="@dimen/dp10"
            android:layout_marginTop="@dimen/dp10"
            android:text="@string/remember_me"
            android:textSize="@dimen/dp12"

            />


        <TextView
            android:id="@+id/txtForgotPwd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/chkRememberMe"
            android:text="@string/forgot_pwd"
            android:layout_below="@id/etPassword"
            android:layout_marginTop="@dimen/dp17"
            android:textSize="@dimen/dp12"
            android:layout_marginLeft="@dimen/dp15"

            />


        <TextView
            android:id="@+id/txtSignUp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/not_have_account"
            android:layout_below="@id/txtForgotPwd"
            android:layout_marginTop="@dimen/dp30"
            android:textSize="@dimen/dp12"
            android:layout_marginLeft="@dimen/dp15"

            />


    </RelativeLayout>
</RelativeLayout>

我要创建的.psd屏幕截图

screenhsot of .psd which I want to create

以及在hdpi设备上的地雷布局:

enter image description here

我该如何解决问题,请帮忙

dimens.xml

<dimen name="dp1">1dp</dimen>
    <dimen name="dp2">2dp</dimen>
    <dimen name="dp3">3dp</dimen>
    <dimen name="dp4">4dp</dimen>

dimens.xml-大

<dimen name="dp1">1.5dp</dimen>
<dimen name="dp2">3.0dp</dimen>
<dimen name="dp3">4.5dp</dimen>
<dimen name="dp4">6.0dp</dimen>

dimes.xml-xlarge

 <dimen name="dp1">2.0dp</dimen>
    <dimen name="dp2">4.0dp</dimen>
    <dimen name="dp3">6.0dp</dimen>

2 个答案:

答案 0 :(得分:0)

您应该使用sp而不是dp来设置文本大小。

从文档中:

  

sp

     

与比例无关的像素-就像dp单位一样,但是它也通过用户的字体大小首选项进行缩放。建议您在指定字体大小时使用本机,以便针对屏幕密度和用户喜好进行调整。

答案 1 :(得分:0)

请使用GitHub的SDP库。通过使用此库,您无需自动处理所有android设备分辨率。您只需创建一个UI文件即可。 这个lib非常简单,只需在项目资源文件夹中的所有维度值文件夹之后使用,也可以如下添加其依赖项。

dependencies {
  implementation 'com.intuit.sdp:sdp-android:1.0.6'
}

您还可以将SSP GitHub lib用于TextSize。像SDP库一样

dependencies {
  implementation 'com.intuit.ssp:ssp-android:1.0.6'
}