«

安卓屏幕适配(各种方案组合)

时间:2024-3-2 18:23     作者:韩俊     分类: Android


本着分享技术的原则,写下这篇不是太完美的文章,希望能帮助到广大的android coder,一起共同进步

本来是不想写这些出处,图片加水印的,但是有些无良网站,直接爬虫抓文章的太可恶了,希望尊重别人的成果。

欢迎转载,但是转载请注明出处:http://blog.csdn.net/dinghqalex


以前对安卓屏幕适配这一块确实感觉蛋疼,始终做不好完美的适配

其实屏幕适配这块,还是需要一定的布局经验才能很好的适配出相对较好的界面

目前为止,我用到最多的还是Linearlayout和RelativeLayout。

Linearlayout通过layout_weight权重占屏幕的比例来控制控件的大小来控制控件在整个布局文件中的比例

我简单写了一个例子来使用这个layout_weight

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

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/top_tv"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@color/blue"
            android:gravity="center"
            android:text="上方文字控件"
            android:textColor="@color/black"
            android:textSize="30dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/bottom_tv"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@color/green"
            android:gravity="center"
            android:text="下面文字控件"
            android:textColor="@color/black"
            android:textSize="30dp" />
    </LinearLayout>

</LinearLayout>
上面的布局代码可以看到,我这里就是简单的将节目分为上下两个部分,权重设置为1:1的比例,界面就分成了上下相等的两个部分,有兴趣的朋友可以将上下的权重改一改,改成2:1,3:1等等比例。
这个布局的效果是这样的


再来看一看2560*1600分辨率情况下的图片


可以看得到的是控件占比也是1:1的比例,没有因为分辨率的改变而控件发生了变化。


再来说说RelativeLayout,相对布局这个东西,我是经常将它的android:layout_marginLeft="20dp"这个属性(margin相关的)用来控制比例,还有就是相对布局中的相对于一个控件对齐等等属性用好,对齐边线,右对齐,居中对齐等等属性,用这些属性也可以对屏幕进行很好的适配。

我贴一个登录界面和布局代码,使用RelativeLayout的例子,希望朋友理解一下布局代码


布局的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg"
    android:orientation="vertical" >

    <include layout="@layout/toolbar" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp" >

        <ImageView
            android:id="@+id/login_logo"
            android:layout_width="120dp"
            android:layout_height="120dp"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:src="@drawable/login_logo" />

        <EditText
            android:id="@+id/login_account_edit"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:layout_below="@+id/login_logo"
            android:layout_marginTop="20dp"
            android:background="@drawable/edit_bg"
            android:ems="20"
            android:focusable="true"
            android:hint="@string/login_accountEditText"
            android:inputType="text"
            android:padding="10dp"
            android:textColor="@color/text"
            android:textColorHint="@color/hint_text_color"
            android:textCursorDrawable="@drawable/cursor_shape"
            android:textSize="15sp" />

        <EditText
            android:id="@+id/login_pwd_edit"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:layout_below="@+id/login_account_edit"
            android:layout_centerVertical="true"
            android:layout_marginTop="20dp"
            android:background="@drawable/edit_bg"
            android:ems="20"
            android:hint="@string/login_pwdEditText"
            android:inputType="text"
            android:padding="10dp"
            android:textColor="@color/text"
            android:textColorHint="@color/hint_text_color"
            android:textCursorDrawable="@drawable/cursor_shape"
            android:textSize="15sp" />

        <Button
            android:id="@+id/login_btn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/login_pwd_edit"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="22dp"
            android:background="@drawable/blue_btn_bg"
            android:text="@string/login_btnText"
            android:textColor="@color/white" />
    </RelativeLayout>

</LinearLayout>


最后我把自己项目中的一个界面贴出来,希望通过布局文件能帮助到大家对屏幕适配这一块有一定的掌握和理解。

不好意思,涂了一点东西在界面图上,保密需要嘛,理解

下面是客户需要的界面


下面是我的布局界面


下面就是我的布局代码了

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

    <include layout="@layout/toolbar" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <!-- 轮播图 -->

        <ViewFlipper
            android:id="@+id/hp_top_viewFlipper"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </LinearLayout>

    <!-- 上面的线性布局 上下比例为4:1 -->

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginTop="3dp"
        android:layout_weight="4"
        android:orientation="horizontal" >

        <!-- 上方左边的布局 -->

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="3dp"
            android:layout_weight="1"
            android:orientation="vertical" >

            <!-- 状态 -->

            <LinearLayout
                android:id="@+id/hp_states_lyt"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="@color/green"
                android:orientation="vertical" >

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="5dp"
                    android:text="状态"
                    android:textColor="@color/white"
                    android:textSize="20dp" />

                <ImageButton
                    android:id="@+id/hp_states_imgBtn"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:background="@color/green"
                    android:src="@drawable/hp_states_icon" />
            </LinearLayout>

            <!-- 捡便宜 -->

            <LinearLayout
                android:id="@+id/hp_cheap_lyt"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:orientation="vertical" >

                <LinearLayout
                    android:id="@+id/hp_getcheap"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="3dp"
                    android:background="@color/lilac" >

                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginLeft="5dp"
                        android:text="捡便宜"
                        android:textColor="@color/white"
                        android:textSize="20dp" />
                </LinearLayout>

                <ImageButton
                    android:id="@+id/hp_cheap_imgBtn"
                    android:layout_width="fill_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:background="@color/lilac"
                    android:src="@drawable/hp_cheap_icon" />
            </LinearLayout>
        </LinearLayout>

        <!-- 上方右边的布局 -->

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="3dp"
            android:layout_weight="2"
            android:orientation="vertical" >

            <!-- 订单的布局 -->

            <LinearLayout
                android:id="@+id/hp_order_lyt"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_marginRight="3dp"
                android:layout_weight="1"
                android:background="@color/yellow"
                android:orientation="horizontal" >

                <RelativeLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1" >

                    <ImageButton
                        android:id="@+id/hp_order_imgBtn"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_centerInParent="true"
                        android:layout_marginLeft="40dp"
                        android:background="@color/yellow"
                        android:src="@drawable/hp_order_icon" />

                    <TextView
                        android:id="@+id/hp_order_tip_tv"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignTop="@+id/hp_order_imgBtn"
                        android:layout_marginLeft="-15dp"
                        android:layout_toRightOf="@+id/hp_order_imgBtn" />
                </RelativeLayout>

                <!-- 订单 -->

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent" >

                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="5dp"
                        android:text="订单"
                        android:textColor="@color/white"
                        android:textSize="20dp" />
                </LinearLayout>
            </LinearLayout>

            <!-- 订单下方的布局 -->

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_marginTop="3dp"
                android:layout_weight="2"
                android:orientation="horizontal" >

                <!-- 左边一点的布局(验证和会员) -->

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_weight="1.5"
                    android:orientation="vertical" >

                    <!-- 验证 -->

                    <LinearLayout
                        android:id="@+id/hp_verify_lyt"
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1.5"
                        android:orientation="vertical" >

                        <LinearLayout
                            android:id="@+id/hp_verify"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:background="@color/bottlegreen"
                            android:gravity="right" >

                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginRight="5dp"
                                android:text="验证"
                                android:textColor="@color/white"
                                android:textSize="20dp" />
                        </LinearLayout>

                        <ImageButton
                            android:id="@+id/hp_verify_imgBtn"
                            android:layout_width="fill_parent"
                            android:layout_height="0dp"
                            android:layout_weight="1.5"
                            android:background="@color/bottlegreen"
                            android:src="@drawable/hp_verify_icon" />
                    </LinearLayout>

                    <!-- 会员 -->

                    <LinearLayout
                        android:id="@+id/hp_vip_lyt"
                        android:layout_width="fill_parent"
                        android:layout_height="0dp"
                        android:layout_weight="1"
                        android:orientation="vertical" >

                        <LinearLayout
                            android:id="@+id/hp_vip"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_marginTop="3dp"
                            android:background="@color/blue"
                            android:gravity="right" >

                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_marginRight="5dp"
                                android:text="会员"
                                android:textColor="@color/white"
                                android:textSize="20dp" />
                        </LinearLayout>

                        <ImageButton
                            android:id="@+id/hp_vip_imgBtn"
                            android:layout_width="fill_parent"
                            android:layout_height="0dp"
                            android:layout_weight="1"
                            android:background="@color/blue"
                            android:src="@drawable/hp_vip_icon" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/hp_mine_lyt"
                    android:layout_width="0dp"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="3dp"
                    android:layout_marginRight="3dp"
                    android:layout_weight="1"
                    android:background="@color/text"
                    android:orientation="vertical" >

                    <!-- 我的 -->

                    <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:background="@color/orange"
                        android:gravity="right" >

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_marginRight="5dp"
                            android:text="我的"
                            android:textColor="@color/white"
                            android:textSize="20dp" />
                    </LinearLayout>

                    <ImageButton
                        android:id="@+id/hp_mine_imgBtn"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:background="@color/orange"
                        android:src="@drawable/hp_mine_icon" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>

    <!-- 下面的线性布局 -->

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginTop="3dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <!-- 评价 -->

        <LinearLayout
            android:id="@+id/hp_evaluate_lyt"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginLeft="3dp"
            android:layout_weight="1.5"
            android:background="@color/purple"
            android:gravity="left" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="评价"
                android:textColor="@color/white"
                android:textSize="20dp" />

            <ImageButton
                android:id="@+id/hp_evaluate_imgBtn"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginRight="20dp"
                android:background="@color/purple"
                android:src="@drawable/hp_evaluate_icon" />
        </LinearLayout>

        <!-- 其他 -->

        <LinearLayout
            android:id="@+id/hp_other_lyt"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginLeft="3dp"
            android:layout_marginRight="3dp"
            android:layout_weight="1"
            android:background="@color/red" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="5dp"
                android:text="其它"
                android:textColor="@color/white"
                android:textSize="20dp" />

            <ImageButton
                android:id="@+id/hp_other_imgBtn"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="@color/red"
                android:src="@drawable/hp_other_icon" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我想,希望认真看过这篇文章的朋友能理解到对屏幕适配的把握。

如果布局的界面很长,一个屏幕摆不下这些控件了,可以参考这篇文章:http://blog.csdn.net/dinghqalex/article/details/45742003

标签: android

热门推荐