亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

AndroidGUI26:程序中動態設定組件的寬度、高度

系統 2858 0
在實際工作中,我們經常需要在程序里面用代碼來控制一些組件的寬度和高度,以適應不同分辨率的屏幕。盡管有不同的Layout供我們使用,但很多時候需要通過用代碼設定組件的大小,以達到良好的界面視覺效果。

注意:組件和控件是有區別的。組件對應的英文是component,控件對應的英文是control;控件是帶有界面的,組件則未必有界面;控件屬于組件,可以說它是帶有界面的組件。比如Button有界面,因此可以說它是控件,也可以說它是組件。LinearLayout沒有界面,因此它不能算是控件,但它卻是組件。本文中由于涉及了帶有和不帶有界面的組件,因此,用組件泛指這兩者。

有些組件,比如Button,可以在程序中用setWidth和setHeight來設定其大小,這是非常方便的。但有些組件卻沒有這兩個設定大小的方法,比如ImageButton、Spinner以及LinearLayout等等,那么如何在程序中根據需要,動態地設定他們的大小呢?下面就用實際的例子來說明這個問題。

1.首先創建一個Android項目:

AndroidGUI26:程序中動態設定組件的寬度、高度以及margin等屬性

2.將圖片文件magnifier.png拖入到項目的res/drawable-mdpi文件夾下。mangifier.png的內容如下:


3.在strings.xml中,增加如下粗體字代碼。這些代碼,將會被Spinner使用:

<string name= "spin_prompt" >請選擇城市 </string>

<string-array name= "cities" >

<item>北京 </item >

<item>上海 </item >

<item>南京 </item >

<item>烏魯木齊 </item>

<item>哈爾濱 </item>

<item>符拉迪沃斯托克 </item>

</string-array>

4.修改main.xml,使之如下:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<Buttonandroid:id="@+id/btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<ImageButtonandroid:id="@+id/image_btn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/magnifier"

/>

<Spinnerandroid:id="@+id/sp"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:entries="@array/cities"

android:prompt="@string/spin_prompt"

/>

<LinearLayout

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

>

<LinearLayoutandroid:id="@+id/ll_left"

android:orientation="horizontal"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="left"

>

<EditText

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello"

/>

</LinearLayout>

<LinearLayoutandroid:id="@+id/ll_right"

android:orientation="horizontal"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="right"

>

<EditText

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Android"

/>

</LinearLayout>

</LinearLayout>

</LinearLayout>

不難看出,mainx.ml有一個Button,一個ImageButton,一個Spinner和兩個EditText。

5.運行本項目,得到的結果如下:

AndroidGUI26:程序中動態設定組件的寬度、高度以及margin等屬性

現在假定,我們要:

a)增加Button的高度

b)增加ImageButton的寬度和高度

c)增加Spinner的寬度

d)將包含Hello的EditText靠左,包含Android的EditText靠右

6.修改AdjustControlSize.java的代碼,使之如下:

public class AdjustControlSize extends Activity

{

private Button btn;

private ImageButton imagebtn;

private Spinner sp;

private LinearLayout ll_left;

private LinearLayout ll_right;

private DisplayMetrics dm;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout. main );

// 獲取屏幕尺寸

dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

btn = (Button)findViewById(R.id. btn );

imagebtn = (ImageButton)findViewById(R.id. image_btn );

sp =(Spinner)findViewById(R.id. sp );

ll_left = (LinearLayout)findViewById(R.id. ll_left );

ll_right = (LinearLayout)findViewById(R.id. ll_right );

// 增加Button的高度,可以很方面地通過setHeight方法來實現。

btn.setHeight(80);

// 但如果要想在代碼中改變某些組件,比如ImageButton、Spinner以及LinearLayout,

// 用setHeight或者setWidth的方式就不行了,因為這些組件中,沒有提供這兩個方法。

// 為此,可以通過LayoutParams這個類(這里我們用LinearLayout.LayoutParams)來實現這一點。

// 改變imagebtn的寬度和高度均為屏幕寬度的1/4

LinearLayout.LayoutParams imagebtn_params = newLinearLayout.LayoutParams(

LayoutParams. WRAP_CONTENT , LayoutParams. WRAP_CONTENT );

imagebtn_params.height = dm.widthPixels / 4;

imagebtn_params.width = dm.widthPixels / 4;

imagebtn.setLayoutParams(imagebtn_params);

// 設定sp的寬度為屏幕寬度的2/3

LinearLayout.LayoutParams sp_params = new LinearLayout.LayoutParams(

LayoutParams. WRAP_CONTENT , LayoutParams. WRAP_CONTENT );

sp_params.width = dm.widthPixels * 2 / 3;

sp.setLayoutParams(sp_params);

// 讓兩個EditText分別處于屏幕的左右兩端。

// 在main.xml中,兩個EditText分別處于ll_left和ll_right這兩個LinearLayout中,且

// 處于ll_left的gravity屬性為left,即置于其中的組件靠左;處于ll_right的gravity

// 屬性為right,即置于其中的組件靠右。但是由于這兩個LinearLayout的寬度屬性均為

// wrap_content,所以它們靠在一起了,由此導致了兩個EditText也靠在一起。

// 如果,我們把ll_left和ll_right的寬度能夠設定為屏幕寬度的一半,那么兩個EditText就

// 會分別處于屏幕的兩端。

LinearLayout.LayoutParams ll_params = new LinearLayout.LayoutParams(

LayoutParams. WRAP_CONTENT , LayoutParams. WRAP_CONTENT );

ll_params.width = dm.widthPixels / 2;

ll_left.setLayoutParams(ll_params);

ll_right.setLayoutParams(ll_params);

}

}

7.運行結果:

AndroidGUI26:程序中動態設定組件的寬度、高度以及margin等屬性

達到了我們在5中假定的目標。

8.總結

如果在程序中不能用setWidth和setHeight來改變大小的組件,通常可以通過LayoutParams的方式進行設定,正如6中代碼的粗體字部分的代碼那樣。動態設定這些組件的margin也是采用類似的方式,比如:

sp_params.width = dm.widthPixels * 2 / 3;

sp_params.leftMargin = 6; // 用這種方式設定組件的margin

sp.setLayoutParams(sp_params);


AndroidGUI26:程序中動態設定組件的寬度、高度以及margin等屬性


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: a毛片a毛片a视频 | 99色99| 久久久一区二区三区不卡 | 久久精品道一区二区三区 | 亚洲精品免费在线视频 | 亚洲精品久久久久久久久久ty | 女人一级毛片 | 站长推荐国产午夜免费视频 | 极品吹潮视频大喷潮tv | 亚洲久热 | 综合色播| 精品一区二区三区在线视频 | 大ji吧快给我别停受不了视频 | 四虎影视久久 | 大尺度福利视频在线观看网址 | 亚洲国产综合久久精品 | 日韩在线视频免费播放 | 亚洲第一人黄所 | 国产成人精品高清不卡在线 | 免费播放毛片 | 欧美在线一级毛片观看 | 亚洲一区二区久久 | 26uuu欧美视频在线观看 | 黑人巨大精品战中国美女 | 精品国产欧美一区二区三区成人 | 亚洲精品香蕉一区二区在线观看 | 国产午夜精品久久久久九九 | 成年免费网站 | 理论片我不卡在线观看 | 奇米影视777在线观看 | 99久久精品国产麻豆 | 久久青草免费免费91线频观看 | 国产特黄 | 久草手机视频在线 | 玖玖色视频 | 中文字幕久久综合 | 欧美综合色 | 欧美日韩亚洲国产 | 国产成人精品免费视频大全五级 | 青青在线精品视频 | 色综综|