android獲取子控制項
『壹』 android LayoutInflater 獲取不到控制項
這個是獲取不到的,因為這個textview沒有實際被調用。但是編譯時R文件中確實有這個textview的id值,所以編譯什麼的都不會報錯。如果你需要獲取其中的值,就在Intent中綁定數據。或者更改它顯示內容的話,就在MainActivity中動態注冊個廣播接收器,從現在這個廣播接收器接受廣播,並改變TextView的顯示內容。
『貳』 Android之自定義控制項
一、簡單自定義控制項MyButton
每一個控制項都是一個java類,有對應的代碼,只要你能正確的編寫java代碼,那麼電腦培訓發現可以創造出符合你需求的控制項,即自定義控制項。
1.通過繼承的方式,創建自定義控制項
通過繼承一個現有的控制項,覆蓋其界面的呈現
通過繼承一個包含若乾子控制項的布局
通過繼承一個現有的控制項,覆蓋某個響應事件
繼承一個View來完整自定義一個心控制項
2.使你的自定義控制項繼承自某個最接近的Android控制項,必須是public
一般都會調用父類的構造方法,注意一般有三個構造方法
覆蓋原來控制項的方法,注意是否要再調用super中的方法
在XML中以類全名的方式引用此控制項
二、復雜自定義控制項MyLogin
需要設計包含一組控制項的自定義控制項就需要用到復雜的自定義控制項
1)使得你的自定義控制項繼承自某個接近的布局
2)正確的實現構造方法:構造方法中實例化目標布局,同時查找到各個子布局
3)添加相應的響應代碼來修改屬性,使得外部能訪問布局中的子控制項
4)在XML中以類全名的方式引用此控制項,完整的包名+類名。
『叄』 android開發 include時如何獲取內部控制項
android開發include獲取內部控制項代碼:
sublayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#505050"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="SubLayout"
/>
<Button
android:id="@+id/mybutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" A Button "
/>
</LinearLayout>
mail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<include android:id="@+id/main1" layout="@layout/sublayout" />
<include android:id="@+id/main2" layout="@layout/sublayout" />
<Button
android:id="@+id/startanotheractivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Start Another Activity "
/>
</LinearLayout>
Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。Android操作系統最初由Andy Rubin開發,主要支持手機。
『肆』 求助:android:layout
布局的介紹:
1、在4.0以前版本中一共有五種布局,都是ViewGroup的子類。分別是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。而TableLayout是LinearLayout的子類。(中文分別是:絕對布局、相對布局、線性布局、幀布局、表格布局)。
2、在2.2操作系統中將AbsoluteLayout過期。而目前TableLayout也逐漸少用。
3、在4.0之後又新增GridLayout。(GridLayout最經典的案例是計算器界面)
總之,Android中一共有六種布局。目前推薦使用RelativeLayout、LinearLayout、GridLayout三種布局。
LinearLayout:
(一)、概念:線性布局控制其中的控制項或組件橫向或縱向排列。不線性布局布局中,每一行或每一列只能放一個控制項。並且線性布局不會換行。當控制項排列到窗體邊緣,後面的控制項就被隱藏,而不會顯示出來。
線性布局的默認方向是水平方向(Horizontal)。vertical
(二)、LinearLayout的常用屬性:
1.android:orientation 定義布局內控制項或組件的排列方式
可選項:vertical 、 horizontal
2.android:layout_width 定義控制項的寬度
可選項:fill_parent / match_parent/ wrap_content/絕對數值
備註:fill_parent / match_parent的效果完全一致,都是填充整個父控制項。但是自2.2版本開始推薦使用match_parent 。wrap_content指的是該控制項的寬度正好包裹內容物。
3.android:layout_height 定義控制項的高度
可選項:fill_parent / match_parent/ wrap_content/絕對數值
備註:fill_parent / match_parent的效果完全一致,都是高度填充整個父控制項。wrap_content指的是該控制項的高度正好包裹內容物。
4.android:id 設置控制項的id。這樣就可以在R.java中自動生成相應的值,在程序中通過findViewById就可以調用。
設置id的格式為:android:id = "@+id/id的名字"
5.android:background 設置控制項的背景顏色或背景圖片
例如:android:background="#ffffff"
android:background="@drawable/圖片名稱"
【備註:】
顏色有RGB顏色格式和ARGB格式。RGB是紅綠藍三原色。而ARGB是帶alpha的三原色,即有透明度的三原色。
#FFFFFF 代表白色
#000000 黑色
#FFFFFFFF 完全不透明
#00FFFFFF 完全透明
#88FFFFFF 半透明
6.android:layout_weight 設置控制項的權重。即各控制項在水平或者垂直方向上平均分配。
備註:如果是水平方向設置權重,要將android:layout_width設置為0dp,如果是垂直方向上使用權重,要將android:layout_height設置為0dp。否則權重容易受到高度或寬度的干擾而出現偏差。
7.android:gravity 該屬性用來控制該View的內容物的位置。
如果該屬性是定義在布局節點中,則該布局中所有控制項的位置都受到這個屬性的控制。
如果該屬性出現在Button、TextView、EditText等控制項中,則用來控制這些控制項上的文字的位置。
可選項有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
【備註:】本屬性與android:layout_gravity不同。
8.android:layout_gravity 該屬性用於設置控制項相對於容器的對齊方式。
可選項有:top、bottom、left、right、center_vertical、center_horizontal 、fill_vertical 、 center、fill等等。
這些可選項中不是適用於每一種布局。在垂直線性布局中,android:gravity為bottom不起作用;而水平線性布局中,android:gravity為right不起作用。
【備註:】而本屬性是android:layout_gravity屬性,與 android:gravity 屬性不同。
(三)、LinearLayout的特有屬性:【重新歸納:去除公共屬性後的特有屬性】
1、android:orientation 布局管理器內組件的排列方式
2、android:gravity 設置布局管理器內組件的對齊方式
(四)、 LinearLayout 子元素的特有屬性:
1、android:layout_weight 子元素在 LinearLayout 中所佔的權重
2、android:layout_gravity 子元素在 LinearLayout 中的對齊方式
RelativeLayout:
(一)、概念:指按著控制項之間的相對位置來進行布局。
(二)、RelativeLayout特有屬性:
1、android:gravity 設置布局容器內子控制項的對齊方式
2、android:ignoreGravity 設置布局管理器內哪個控制項不受gravity屬性的影響
(三)、RelativeLayout子元素的特有屬性:LayoutParams
A、第一組:指兄弟控制項之間的相對位置。該組屬性的值是另一個控制項的id。
layout_toRightOf 該控制項在哪個控制項的右側
layout_toLeftOf 該控制項在哪個控制項的左側
layout_above 該控制項在哪個控制項的上側
layout_below 該控制項在哪個控制項的下側
B、第二組:指兄弟控制項之間的對齊關系。該組屬性的值是另一個控制項的id。
layout_alignRight 該控制項與哪個控制項的右對齊
layout_alignLeft 該控制項與哪個控制項的左對齊
layout_alignTop 該控制項與哪個控制項的頂對齊
layout_alignBottom 該控制項與哪個控制項的底對齊
C、第三組:指控制項與父布局之間的對齊關系。該組屬性的值是true或者false。
layout_alignParentRight 該控制項與父布局控制項的右對齊嗎?
layout_alignParentLeft 該控制項與父布局控制項的左對齊嗎?
layout_alignParentTop 該控制項與父布局控制項的頂端對齊嗎?
layout_alignParentBottom 該控制項與父布局控制項的底部對齊嗎?
layout_centerInParent 該控制項位於父布局控制項的中心位置嗎?
layout_centerVertical 該控制項位於父布局控制項的垂直中心位置嗎?
layout_centerHorizontal 該控制項位於父布局控制項的水平中心位置嗎?
GridLayout:網格布局
(一)、GridLayout布局屬性:
1、android:alignmentMode
屬性說明:設置布局的對齊模式。可以取以下值:
alignBounds -- 對齊子視圖邊界。
alignMargins -- 對齊子視圖邊距。
2、android:columnCount
屬性說明:GridLayout的最大列數
3、android:rowCount
屬性說明:GridLayout的最大行數
4、android:orientation
屬性說明:GridLayout中子元素的布局方向。有以下取值:
horizontal -- 水平布局。
vertical -- 豎直布局。
5、android:columnOrderPreserved
屬性說明: 設置該網格布局是否保留列序號。默認是true。
6、android:rowOrderPreserved
屬性說明: 設置該網格布局是否保留行序號。默認是true。
7、android:useDefaultMargins
屬性說明: 設置GridLayout使用默認的邊距。默認值是false。
(二)、GridLayout子元素的屬性:
1、android:layout_column
屬性說明: 顯示該控制項的列。例如,android:layout_column="0",表示在第1列顯示該控制項;android:layout_column="1",表示在第2列顯示該控制項。
2、android:layout_row
屬性說明: 該控制項所在行。例如,android:layout_row="0",表示在第1行顯示該控制項;android:layout_row="1",表示在第2行顯示該控制項。它和 android:layout_column類似。
3、android:layout_columnSpan
屬性說明: 列合並。即該控制項所佔的列數。例如,android:layout_columnSpan="2",表示該控制項佔2列。
4、android:layout_rowSpan
屬性說明: 行合並。即該控制項所佔的行數。例如,android:layout_rowSpan="2",表示該控制項佔2行。
5、android:layout_gravity
屬性說明:該控制項的布局方式。選項值:
top -- 控制項置於容器頂部,不改變控制項的大小。
bottom -- 控制項置於容器底部,不改變控制項的大小。
left -- 控制項置於容器左邊,不改變控制項的大小。
right -- 控制項置於容器右邊,不改變控制項的大小。
center_vertical -- 控制項置於容器豎直方向中間,不改變控制項的大小。
fill_vertical -- 如果需要,則往豎直方向延伸該控制項。
center_horizontal -- 控制項置於容器水平方向中間,不改變控制項的大小。
fill_horizontal -- 如果需要,則往水平方向延伸該控制項。
center -- 控制項置於容器中間,不改變控制項的大小。
fill -- 如果需要,則往水平、豎直方向延伸該控制項。
clip_vertical -- 垂直剪切,剪切的方向基於該控制項的top/bottom布局屬性。若該控制項的gravity是豎直的:若它的gravity是top的話,則剪切該控制項的底部;若該控制項的gravity是bottom的,則剪切該控制項的頂部。
clip_horizontal -- 水平剪切,剪切的方向基於該控制項的left/right布局屬性。若該控制項的gravity是水平的:若它的gravity是left的話,則剪切該控制項的右邊;若該控制項的gravity是 right的,則剪切該控制項的左邊。
start -- 控制項置於容器的起始處,不改變控制項的大小。
end -- 控制項置於容器的結束處,不改變控制項的大小。
『伍』 什麼是android父控制項、子控制項,還有兩個有什麼關系
首先需要明白什麼是控制項?即xml中直接拖拽到布局的可視化「東西」
如下代碼:
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_background">
<TextView
android:id="@+id/version_detail_git"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@color/color_gray_bfc2c5"
android:textSize="15sp"/>
</RelativeLayout>- 上述代碼中,RelativeLayout是TextView的父控制項,TextView是RelativeLayout的子控制項,父控制項包含子控制項,然後在父控制項中調整對應的位置
『陸』 Android 常見布局
Android六大基本布局分別是:線性布局LinearLayout、表格布局TableLayout、相對布局RelativeLayout、層布局FrameLayout、絕對布局AbsoluteLayout、網格布局GridLayout。其中,表格布局是線性布局的子類。網格布局是android 4.0後新增的布局。
在手機程序設計中,絕對布局基本上不用,用得相對較多的是線性布局和相對布局。
padding是站在父view的角度描述問題,它規定它裡面的內容必須與這個父view邊界的距離。margin則是站在自己的角度描述問題,規定自己和其他(上下左右)的view之間的距離,如果同一級只有一個view,那麼它的效果基本上就和padding一樣了。
顯示特點:所有子控制項按照橫向或者豎向依次排列
left(左)、right(右)、top(上)、bottom(下)、center(中心)、
enter_vertical(豎向中心)、center_horizontal(橫向中心)
left(左)、right(右)、top(上)、bottom(下)、center(中心)、
enter_vertical(豎向中心)、center_horizontal(橫向中心)
子控制項的用法:android:layout_weight="1" 多個控制項同時使用,可以實現平分的效果
顯示特點:和LinearLayout布局相似,所有子控制項默認顯示在RelativeLayout的左上角
layout_toRightOf 在指定控制項的右邊
layout_toLeftOf 在指定控制項的左邊
layout_above 在指定控制項的上邊
layout_below 在指定控制項的下邊子控制項對齊關系
layout_alignRight 與指定控制項右對齊
layout_alignLeft 與指定控制項左對齊
layout_alignTop 與指定控制項上對齊
layout_centerInParent 與父容器中間對齊 pairunte
layout_centerVertical 與父容器豎向中心對齊
layout_centerHorizontal 與父容器橫向中心對齊
layout_alignParentLeft 與父容器左邊對齊
layout_alignParentTop 與父容器上邊對齊
layout_alignParentRight 與父容器右邊對齊
layout_alignParentBottom 與父容器下邊對齊
顯示特點:所有子控制項默認在GridLayout中橫向依次排列,當只等每行的列數時,到達指定列數
會自動換行顯示。
layout_column 在網格的第幾列
layout_row 在網格的第幾行
layout_columnSpan 跨列
layout_rowSpan 跨行
layout_gravity 在一個網格中的重心位置
columnCount 每行列總數
顯示特點:所有的子控制項默認顯示在FrameLayout的左上角,會重疊在一起顯示。
layout_gravity(設置給子控制項,調整控制項在容器內的重心)
常用值:
left(左)、 right(右)、
top(上)、 bottom(下)、
center(中心)、 center_vertical(豎向中心)
center_horizontal(橫向中心)
表格布局和網格布局類似,但是需要注意的是,表格布局不能跨行,只能跨列
『柒』 android 怎麼在布局裡面獲取控制項
layout為布局,布局裡面可以放任何空間,獲取空間可以用findViewById方法獲取
android 獲取某個布局控制項 添加到另一個布局中
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout relativeLayout = (LinearLayout) findViewById(R.id.layout456);
ImageView imgApple2 = new ImageView(this);
imgApple2.setImageResource(R.drawable.ic_launcher);
relativeLayout.addView(imgApple2);
LayoutInflater factorys = LayoutInflater.from(MainActivity.this);
final View textEntryView = factorys.inflate(R.layout.layout1, null);
// LinearLayout linearLayout = (LinearLayout) textEntryView
// .findViewById(R.id.layout1);
// relativeLayout.addView(linearLayout);
EditText editText1 = (EditText) textEntryView
.findViewById(R.id.editText1);
relativeLayout.addView(editText1);