2016-03-06 2 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

Вы можете использовать setConetentView(R.layout.content) любым способом в любом действии, пока content.xml существует как файл макета в каталоге макета.

Активность - это единственная, сфокусированная вещь, которую пользователь может сделать. Почти все действия взаимодействуют с пользователем, поэтому класс Activity принимает заботу о создании окна для вас, в котором вы можете разместить свой пользовательский интерфейс с помощью setContentView (View). Хотя действия часто представлены пользователю в виде полноэкранных окон, их также можно использовать другими способами: как плавающие окна (через тему с установкой windowIsFloating) или встроенный внутри другого действия (с использованием ActivityGroup). Существует два метода , которые будут реализованы практически во всех подклассах Activity:

onCreate (Bundle) - это то, где вы инициализируете свою деятельность. В большинстве случаев здесь обычно вызывается setContentView (int) с ресурсом макета , определяющим ваш пользовательский интерфейс, и используя findViewById (int) до , извлекает виджеты в этом пользовательском интерфейсе, которые вам необходимо взаимодействовать с программным обеспечением . onPause() - это то, где вы имеете дело с пользователем, покидающим вашей деятельностью. Самое главное, любые изменения, сделанные пользователем, должны быть сделаны в этот момент (обычно для ContentProvider, содержащего данные ). Чтобы использовать Context.startActivity(), все классы активности должны иметь соответствующую декларацию в своем файле AndroidManifest.xml.

Источник: http://developer.android.com/reference/android/app/Activity.html

+1

Я думаю, что это не отвечает на мой вопрос. Я спрашиваю, что, скажем, вы используете 'setConetentView (R.layout.content)', а позже задано 'Activity', есть ли способ, которым вы могли бы получить 'R.layout.content 'вы перешли к' setConetentView'? – media

0

использовать этот код, чтобы получить макет ID:

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

и это, чтобы получить строку:

getResources().getResourceName() 
0

Поскольку активность простирается от View, вы не должны» Это нужно сделать. Вы, в некотором смысле, уже ссылаетесь на корневой вид внутри действия. Именно это позволяет вам звонить findViewById() в любое время. Если вы хотите найти корневой элемент, убедитесь, что корень (LinearLayout или RelativeLayout) имеет идентификатор, и вы могли бы сделать что-то вроде:

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); 

Но вы также можете использовать тот же идентификатор, используемый в корневом элементе вас 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

Смежные вопросы