2016-03-06 70 views
2

onCreate()方法中,我們可以使用setContentView(R.layout.something)將佈局關聯到活動。無論如何,我可以稍後檢索something進行一項活動嗎?如何獲取與活動關聯的佈局名稱?

我知道我可以使用this.findViewById(android.R.id.content).getRootView()來獲取活動的內容視圖,但不知道如果有反正從那裏我可以得到something

+0

通過「東西」,你的意思是視圖的'id'屬性?如果是這樣,它只是調用'getId()'的一個例子,它將返回int值。要將它作爲'String',在這個問題中使用Blackbelt的答案:http://stackoverflow.com/questions/14647810/easier-way-to-get-views-id-string-by-its-id-int – PPartisan

回答

-1

只要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

+1

我認爲這不能回答我的問題,我問的是讓我們說你使用'setConetentView(R.layout.content)',後來給了一個'活動'有什麼方法可以檢索'R.layout.content '你傳遞給'setConetentView'? – media

0

使用此代碼來獲取佈局ID:

this.findViewById(android.R.id.content).getRootView().getId() 

,這讓字符串:

getResources().getResourceName() 
0

由於活動從View延伸,你不該」不需要這樣做。某種程度上,您已經在引用活動中的根視圖。這就是允許你隨時撥打findViewById()。如果你想找到根元素,請確保您的根(的LinearLayout或RelativeLayout的)有一個id,你可以這樣做:用

LinearLayout rootLayout = (LinearLayout) findViewById(R.id.my_root); 
0

你可以得到你的Activity的根視圖:

this.findViewById(android.R.id.content) 

如果你需要得到您添加到使用setContentView()您的活動視圖,您可以使用

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this 
      .findViewById(android.R.id.content)).getChildAt(0); 

但你也可以用在你的根元素使用相同的ID r xml。

1

當你想一般解決它所有的活動:

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); 
    } 
} 
+0

這並不回答我的問題。問題是我沒有'R.layout.activity_main',我想稍後再檢索它,而且我不能像第一部分中的建議那樣更改源代碼。 – media

+0

請看看我更新的答案 – yital9

相關問題