[英]Syntax to create unique composite column - Android SQLiteOpenHelper
[英]Create a composite view in Android
我想創建一個自定義視圖(我稱之為MyComplexView
),例如RelativeLayout
與Imageview
,一個TextView
,和一個Button
。
我想用布局聲明一個xml,然后創建類:
MyComplexView extends RelativeLayout{...}
但我不知道應該覆蓋什么來表明哪個布局應該膨脹。
我怎樣才能做到這一點? 謝謝
像這樣的東西:
從超類中添加構造函數。 (只有上下文的那個用於創建視圖programaticaly,其他用於在XML中添加視圖時。
例如,創建一個名為init()
的方法,並從每個構造函數中調用它。
在init方法里面做:
LayoutInflater.from(context).inflate(R.layout.my_view_layout,this,true);
現在在膨脹額外的參數實際意味着:
true - >將布局附加到您的案例相對布局中的根(如果您的布局根也是相對布局,那么在xml內部您可以只合並標簽,並在代碼中對齊它們以便層次結構更簡單)或任何布局你喜歡的布局。
這個 - >在您的情況下將膨脹視圖附加到您正在擴展的相對布局的布局。
它會自動附加到根目錄 - > extends RelativeLayout。
然后你可以使用findViewById:
this.findViewById(R.id.myView);
我不是100%確定你的主要目標是什么,所以我試着徹底:
如果要在其他布局中包含復雜布局,則只需定義my_complext_layout.xml
,並在其他布局中放置:
<include layout="@layout/my_complext_layout" />
如果您需要運行自己的代碼,那么您可以簡單地將此布局的根目錄設置為MyComplexView
,並且可以在創建視圖時運行代碼。
如果您打算讓代碼在布局上運行,那么只需實現OnGlobalLayoutListener
並將其添加到視圖構造函數中的布局中。
為MyComplexView
實現一個構造函數:
public MyComplexView(Context context, AttributeSet attrs){
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.header_view, this, true);
mHeaderView = (TextView)findViewById(R.id.header);
if(mHeaderView != null)
mHeaderView.setText("Test");
}
創建自定義視圖通常旨在創建一個尚不存在的窗口小部件。 你要做的是在多個地方重復相同的布局。
根據您的上下文,您有多個選項可以執行此操作。
如果要放置布局,只需在單獨的文件中創建布局,並在ListAdapter中使用它。 為此,請查看ListView教程 。
如果此布局是要嵌入多個活動的通用布局,請嘗試使用片段。 片段是活動的子部分,具有自己的視圖。 或者,您可以使用標記將布局嵌入到幾個xml中。
如果您真的想要一個自定義類和單個小部件,那么您需要擴展View類。 擴展布局意味着您不要以不同方式組織子窗口小部件(例如,將它們組織成圓形)。 擴展視圖,您可以以相同的方式准確地組織您想要的內容(按鈕,圖像,文本)。 但我不會騙你,這意味着很多工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.