Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android 代碼動態改變View的屬性

Android 代碼動態改變View的屬性

編輯:關於android開發

Android 代碼動態改變View的屬性


設置Android View的長寬和位置我們平時都會在Layout的XML中定義,那麼什麼時候需要動態在代碼中設置View的屬性呢?先看下面這個UI設計

這裡寫圖片描述

在這個UI設計中,上面的ImageView被設計成是長寬是16:9的比例,因為手機屏幕的區別,圖片的寬度是無法確定的,所以在XML中是無法設置16:9比例的ImageView,因此想要實現這個UI效果就需要在運行時獲得手機屏幕寬度然後按照16:9的比例設置ImageView的高度。

先看下動態改變View的Demo演示<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCkltYWdlVmlld8vYssTAtNfU09ogRmFjZWJvb2sgdGVhbSBkcmliYmJsZQ0KPHA+PGltZyBhbHQ9"這裡寫圖片描述" src="http://www.bkjia.com/uploads/allimg/160417/0414026209-1.gif" title="\" />

主要的實現方式是通過View.getLayoutParams()獲取LayoutParams對象,然後通過LayoutParams對象設置View的寬高和邊距等等,然後View重新setLayoutParams。

下面看一下具體的實現步驟

Layout 一個ImageView 下面4個Button用來動態控制圖片




    

然後是MainActivity,運行的時候動態獲取屏幕寬度,然後去設置ImageView的高度,具體參考代碼注釋

/**
 * Blog:www.lijizhou.com
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private ImageView image;
    private Button btn_43,btn_169;
    private Button btn_marginleft,btn_marginright;

    //為了更改imageview,獲取LayoutParmas對象
    // ImageView父Group是Linearlayout所以這裡使用LinearLayout.LayoutParams
    // 你也可以使用通用的ViewGroup.LayoutParams 不過支持的屬性較少
    LinearLayout.LayoutParams params;

    //ImageView距左邊距
    private int left;
    //ImageView距右邊距
    private int right;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();


    }

    public void initView(){
        image=(ImageView)findViewById(R.id.image);
        params=(LinearLayout.LayoutParams)image.getLayoutParams();
        btn_43=(Button)findViewById(R.id.btn_43);
        btn_169=(Button)findViewById(R.id.btn_169);
        btn_marginleft=(Button)findViewById(R.id.btn_marginleft);
        btn_marginright=(Button)findViewById(R.id.btn_marginright);
        btn_43.setOnClickListener(this);
        btn_169.setOnClickListener(this);
        btn_marginleft.setOnClickListener(this);
        btn_marginright.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_43:


                params.height=getScreenWidth()*3/4;
                image.setLayoutParams(params);
                break;
            case R.id.btn_169:

                params.height=getScreenWidth()*9/16;
                image.setLayoutParams(params);
                break;

            case R.id.btn_marginleft:
                //左邊距增加 可以直接使用PX 或者 轉換使用DP單位
                params.leftMargin=dp2px(this,left+=8);
                image.setLayoutParams(params);
                break;

            case R.id.btn_marginright:
                params.rightMargin=dp2px(this,right+=8);
                image.setLayoutParams(params);
                break;
        }
    }


    //獲取運行屏幕寬度
    public int getScreenWidth(){
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        //寬度 dm.widthPixels
        //高度 dm.heightPixels
        return  dm.widthPixels ;
    }

    //DP轉PX
    public static int dp2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    //PX轉DP
    public static int px2dp(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}

 

 

Ok,一個動態改變View的小示例就實現了,代碼非常簡單,LayoutParams對象不僅可以支持更改寬高邊距還支持動態設置weight等等一系列操作,需要你自己去探索實現:)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved