在onCreate()
方法中,我們可以使用setContentView(R.layout.something)
將佈局關聯到活動。無論如何,我可以稍後檢索something
進行一項活動嗎?如何獲取與活動關聯的佈局名稱?
我知道我可以使用this.findViewById(android.R.id.content).getRootView()
來獲取活動的內容視圖,但不知道如果有反正從那裏我可以得到something
?
在onCreate()
方法中,我們可以使用setContentView(R.layout.something)
將佈局關聯到活動。無論如何,我可以稍後檢索something
進行一項活動嗎?如何獲取與活動關聯的佈局名稱?
我知道我可以使用this.findViewById(android.R.id.content).getRootView()
來獲取活動的內容視圖,但不知道如果有反正從那裏我可以得到something
?
只要content.xml
作爲佈局文件存在於佈局目錄中,就可以在任何活動的任何方法中使用setConetentView(R.layout.content)
。
一項活動是用戶可以做的一件單獨的,重點突出的事情。幾乎 所有活動都與用戶進行交互,因此活動類需要 關注爲您創建一個窗口,您可以在其中使用您的UI設置 setContentView(View)。雖然活動通常作爲全屏窗口呈現給用戶 ,但它們也可以以其他方式使用:如 浮動窗口(通過具有windowIsFloating集合的主題)或嵌入 (使用ActivityGroup)。有幾種方法幾乎所有的子類都會執行:
onCreate(Bundle)是您初始化活動的地方。大多數 重要的是,在這裏你通常會調用setContentView(int)和一個定義UI的 佈局資源,並且使用findViewById(int)到 檢索該UI中的窗口小部件,您需要以編程方式與 交互。 onPause()是您處理用戶離開 您的活動的地方。最重要的是,此時用戶所做的任何更改應該是 (通常是持有 數據的ContentProvider)。要與Context.startActivity()一起使用,所有活動類 必須在其包的 AndroidManifest.xml中具有相應的聲明。
來源:http://developer.android.com/reference/android/app/Activity.html
我認爲這不能回答我的問題,我問的是讓我們說你使用'setConetentView(R.layout.content)',後來給了一個'活動'有什麼方法可以檢索'R.layout.content '你傳遞給'setConetentView'? – media
使用此代碼來獲取佈局ID:
this.findViewById(android.R.id.content).getRootView().getId()
,這讓字符串:
getResources().getResourceName()
由於活動從View延伸,你不該」不需要這樣做。某種程度上,您已經在引用活動中的根視圖。這就是允許你隨時撥打findViewById()
。如果你想找到根元素,請確保您的根(的LinearLayout或RelativeLayout的)有一個id,你可以這樣做:用
LinearLayout rootLayout = (LinearLayout) findViewById(R.id.my_root);
你可以得到你的Activity
的根視圖:
this.findViewById(android.R.id.content)
如果你需要得到您添加到使用setContentView()
您的活動視圖,您可以使用
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
但你也可以用在你的根元素使用相同的ID r xml。
當你想一般解決它所有的活動:
public class BaseActivity extends AppCompatActivity {
private int layoutId;
@Override
public void setContentView(int layoutResID) {
this.layoutId = layoutResID;
super.setContentView(layoutResID);
}
protected String getLayoutName() {
return getResources().getResourceEntryName(this.layoutId);
}
}
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("TAG", getLayoutName());
}
}
或者你也可以這樣做只是這樣:
public class MainActivity extends AppCompatActivity {
private String layoutName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.layoutName = getResources().getResourceEntryName(R.layout.activity_main);
Log.d("TAG", layoutName);
}
}
通過「東西」,你的意思是視圖的'id'屬性?如果是這樣,它只是調用'getId()'的一個例子,它將返回int值。要將它作爲'String',在這個問題中使用Blackbelt的答案:http://stackoverflow.com/questions/14647810/easier-way-to-get-views-id-string-by-its-id-int – PPartisan