Android 开发 _ 精准排布控件位置

#移动开发 #Android

1. 简述

在 Android 系统上开发程序,很多时候需要精准的排布控件的位置和大小.并且适合各种比例的屏幕(4:3,16:9…),下面分别介绍在高版本和低版本的 Android 中的实现方法.

2. Android Studio/高版本 Android 实现

  1. 说明
    使用高版本 android 内置的 android-support-percent-lib 库,通过设置百分比的方法,实现了该功能,Demo 一般都是 android

studio,Eclipse 下需要下载支持库:[http://download.csdn.net/detail/sbsujjbcy/8857747

](http://download.csdn.net/detail/sbsujjbcy/8857747)
在 Layout 中设置百分比:PercentRelativeLayout/PercentFrameLayout/PercentLinearLayout

  1. Layout 文件

    <android.support.percent.PercentFrameLayout

    xmlns:android="http://schemas.android.com/apk/res/android"
    
    xmlns:app="http://schemas.android.com/apk/res-auto"
    
    android:layout_width="match_parent"
    
    android:layout_height="match_parent">
    
    
    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#44ff0000"
        android:text="width:30%,height:20%"
        app:layout_heightPercent="20%"
        app:layout_marginLeftPercent="10%"
        app:layout_marginTopPercent="40%"
        app:layout_widthPercent="30%"/>

    </android.support.percent.PercentFrameLayout>

  2. 相关属性:

layout_widthPercent

layout_heightPercent

layout_marginPercent

layout_marginLeftPercent

layout_marginTopPercent

layout_marginRightPercent

layout_marginBottomPercent

layout_marginStartPercent

layout_marginEndPercent

  1. 修改 build.gradle
    在 dependencies{}加
    compile 'com.android.support:percent:22.2.0'

3. 使用 Eclipse/低版本 Android 实现

  1. 说明
    推荐用此方法,它的通用性更强,适合各个 Android 版本,无需外加扩展库,对于 layout 按一定比例或规则排列的界面更方便使用。

  2. Layout 文件

    <TextView
        android:id="@+id/txt"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="left|top"
        android:background="#44ff0000"
        android:text="testme"/>

  3. Java 程序

    package com.test.testme;

    import android.app.Activity;

    import android.os.Bundle;

    import android.widget.TextView;

    import android.widget.RelativeLayout;

    public class testme extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState)
     {
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.main);
        TextView txtView = (TextView) findViewById(R.id.txt);
        RelativeLayout.LayoutParams params =(RelativeLayout.LayoutParams)txtView.getLayoutParams();
        params.width = 100;
        params.height = 100;
        params.setMargins(100,200,0,0);
               txtView.setLayoutParams(params);
     }

    }