使用硬编码值,Android应用布局看起来很糟糕

时间:2015-02-23 12:52:42

标签: android android-layout

在这里玩新的应用布局。 这就是我想要的样子(在android studio中看起来像这样):

无论设备如何,我都想让文字看起来很好看。现在我正在使用硬编码值,但不知道该怎么做。任何资源/代码样本都会很棒。

这是我目前的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:id="@+id/awesomelayout">

<ImageView
    android:id="@+id/iconimg"
    android:src="@drawable/ic_launcher"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />


<TextView android:text="Phone Optimizer" android:layout_width="wrap_content" android:layout_centerHorizontal="true"
    android:layout_height="wrap_content"
    android:id="@+id/title"
    android:layout_alignParentTop="true"
    android:textSize="25dp" />





<ImageView
    android:id="@+id/safe"
    android:src="@drawable/sec"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_below="@+id/lazyswipe"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="42dp" />
/>


<Button
    android:layout_width="100dp"
    android:layout_height="50dp"

    android:text="Scan Now"
    android:id="@+id/SecButton"
    android:onClick="secBtn"

    android:layout_gravity="right"
    android:layout_alignBottom="@+id/safe"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<TextView android:text="360 Security" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/smltitle"
    android:textSize="30dp"


    android:layout_alignTop="@+id/safe"
    android:layout_toRightOf="@+id/safe"
    android:layout_toEndOf="@+id/safe" />

<TextView
    android:text="Scan for Viruses" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/smldsc"
    android:textSize="23dp"


    android:layout_below="@+id/smltitle"
    android:layout_alignLeft="@+id/smllazydsc"
    android:layout_alignStart="@+id/smllazydsc" />









<ImageView
    android:id="@+id/lazyswipe"
    android:src="@drawable/lz"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />
/>


<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="Update Now"
    android:id="@+id/lazyBtn"
    android:onClick="lazyBtn"
    android:layout_gravity="right"
    android:layout_alignBottom="@+id/lazyswipe"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<TextView android:text="LazySwipe" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/smllazytitle"
    android:textSize="30dp"
    android:layout_alignTop="@+id/lazyswipe"
    android:layout_alignRight="@+id/smltitle"
    android:layout_alignEnd="@+id/smltitle" />

<TextView
    android:text="Make phone 30% faster" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/smllazydsc"
    android:textSize="23dp"

    android:layout_below="@+id/smllazytitle"
    android:layout_alignLeft="@+id/smllazytitle"
    android:layout_alignStart="@+id/smllazytitle" />


<ImageView
    android:id="@+id/apus"
    android:src="@drawable/apus"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:layout_below="@+id/iconimg"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />
/>


<Button
    android:layout_width="100dp"
    android:layout_height="50dp"
    android:text="Speed Now"
    android:id="@+id/apusButton"
    android:onClick="apusBtn"
    android:layout_gravity="right"
    android:layout_alignBottom="@+id/apus"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<TextView android:text="Apus Booster" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/apusTitle"
    android:textSize="30dp"
    android:layout_alignTop="@+id/apus"
    android:layout_alignLeft="@+id/apusdesc"
    android:layout_alignStart="@+id/apusdesc" />

<TextView
    android:text="Make phone 30% faster" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/apusdesc"
    android:textSize="23dp"

    android:layout_below="@+id/apusTitle"
    android:layout_alignLeft="@+id/smllazytitle"
    android:layout_alignStart="@+id/smllazytitle" />

请给我任何建议,我会解决它:)

4 个答案:

答案 0 :(得分:1)

良好的做法是将您的硬代码值移动到值 - &gt; strings.xml中并从中获取字符串,如下所示 - &gt; android:text="@string/yourStringVariableName"

答案 1 :(得分:1)

为值不同的屏幕尺寸提供不同的尺寸&gt; dimens.xml

enter image description here

然后设置维度而不是硬代码,例如: 设置android:layout_width="@dimens/btn_size"而不是android:layout_width="100dp"

您可以为文字大小等执行此操作。

您还可以使用嵌套布局或wrap_contentmatch_parent来使您的布局在每台设备上都看起来很好。

答案 2 :(得分:0)

首先,我看不到任何图像。是上传了吗?

你要问的是一个难以回答的问题,你必须做出很多步骤和测试才能成功 如另一个答案所述,您可以将dimens.xml用于不同的设备。 另外,请确保使用sp而不是dp作为文本大小。它考虑了设备上的用户首选项和主题。 所有这些都很好,但我不会从那里开始。

删除所有硬编码值,对视图大小使用wrap_content和match_parent,并用下面的样式(小,中,大)替换文本大小

<TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.DeviceDefault.Medium"
            android:text="@string/yourTextIdInStringsXml"
            android:layout_marginTop="5dip"
            android:layout_marginBottom="2dip"/>

正如您所看到的,我仅将硬编码值用于较小的边距,这可能不会导致任何问题。 您还有一个硬编码的按钮。使用wrap_content或match_parent,如果需要将其与需要更大或更小的其他东西配对,请使用嵌套的LinearLayouts和layout_weight属性。

祝你好运!!!

答案 3 :(得分:0)

Ok, so I fixed it myself, I'm sure I'm still using bad coding practices, but the layout looks good on the emulator and my own device. yay.!

Here's the code:

    <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:auto="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:id="@+id/awesomelayout">

    <ImageView
        android:id="@+id/iconimg"
        android:src="@drawable/ic_launcher"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />


    <TextView android:text="Phone Optimizer" android:layout_width="wrap_content" android:layout_centerHorizontal="true"
        android:layout_height="wrap_content"
        android:id="@+id/title"
        android:layout_alignParentTop="true"
        android:textSize="25dp" />







    <ImageView
        android:id="@+id/apus"
        android:src="@drawable/apus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_below="@+id/iconimg"
        android:layout_marginTop="30dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />





    <TextView android:text="Apus Booster" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/apusTitle"
        android:textSize="30dp"
        android:layout_alignTop="@+id/apus"
        android:layout_alignLeft="@+id/apusdesc"
        android:layout_alignStart="@+id/apusdesc" />

    <TextView
        android:text="Make phone 30% faster" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/apusdesc"
        android:textSize="23dp"

        android:layout_below="@+id/apusTitle"
        android:layout_alignLeft="@+id/smllazytitle"
        android:layout_alignStart="@+id/smllazytitle" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Speed Now"
        android:id="@+id/apusButton"
        android:onClick="apusBtn"
        android:layout_gravity="right"
        android:layout_below="@+id/apusdesc"
        android:layout_alignParentRight="true"
         />







    <ImageView
        android:id="@+id/lazyswipe"
        android:src="@drawable/lz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:layout_below="@+id/apus" />



    <TextView android:text="LazySwipe" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/smllazytitle"
        android:textSize="30dp"
        android:layout_alignTop="@+id/lazyswipe"
        android:layout_alignRight="@+id/smltitle"
        android:layout_alignEnd="@+id/smltitle" />

    <TextView
        android:text="Make phone 30% faster" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/smllazydsc"
        android:textSize="23dp"

        android:layout_below="@+id/smllazytitle"
        android:layout_alignLeft="@+id/smllazytitle"
        android:layout_alignStart="@+id/smllazytitle" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Update Now"
        android:id="@+id/lazyBtn"
        android:onClick="lazyBtn"
        android:layout_gravity="right"
        android:layout_below="@+id/smllazydsc"
        android:layout_alignParentRight="true"
         />




    <ImageView
        android:id="@+id/safe"
        android:src="@drawable/sec"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_below="@+id/lazyswipe"
        android:layout_marginTop="80dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
         />

    <TextView android:text="360 Security" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/smltitle"
        android:textSize="30dp"
        android:layout_alignTop="@+id/safe"
        android:layout_toRightOf="@+id/safe"
        android:layout_toEndOf="@+id/safe" />

    <TextView
        android:text="Scan for Viruses" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/secdesc"
        android:layout_below="@+id/smltitle"
        android:layout_alignLeft="@+id/smllazydsc"
        android:layout_alignStart="@+id/smllazydsc" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Scan Now"
        android:id="@+id/SecButton"
        android:onClick="secBtn"
        android:layout_below="@+id/secdesc"
        android:layout_gravity="right"
        android:layout_alignParentRight="true"
         />




</RelativeLayout>
</ScrollView>