我可以通过findViewById以编程方式访问我的XML布局

时间:2014-03-17 10:37:47

标签: java android android-layout

例如,我的布局看起来像这样

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">
</RelativeLayout>

我可以吗

RelativeLayout rl = (RelativeLayout)findViewById(R.layout.activity_main); rl.someMethod();

当我尝试尝试NPE时,我很好奇,如果这样做是可行的。

5 个答案:

答案 0 :(得分:1)

不,你不能。您总是想为RelativeLayout创建一个id并提及该ID

   <RelativeLayout
   android:id="@+id/a"
    />

RelativeLayout rl =(RelativeLayout)findViewById(R.id.a);

答案 1 :(得分:1)

当然可以在执行此操作时访问此布局。

您获得NullPointerException因为您正在访问不存在的activity_main。您在XML文件中的布局没有指定其ID,而当您尝试获取activity_main时,它应该具有相同名称的ID:

android:id="@+id/activity_main"

答案 2 :(得分:1)

你需要

android:id="@+id/relativeLayout"

然后

setContentView(R.layout.activity_main); // set layout to the activity
RelativeLayout rl = (RelativeLayout)findViewById(R.id.relativeLayout); 
// then initialize views 

得到NullPointerException findViewById,但是找不到提到的ID为整数值的视图。你还有R.layout.activity_main

我不知道someMethod()是什么。您需要查看RelativeLayout公共方法

的文档

http://developer.android.com/reference/android/widget/RelativeLayout.html

答案 3 :(得分:1)

可以以编程方式访问RelativeLayout。你做错了是你试图访问findViewById中的布局文件。你应该做的是指定相对布局的id,而不是包含它的文件的名称。为此,首先使用

将id设置为相对布局
android:id="@+id/someRelativeLayout"

然后调用setContentView(R.layout.activity_main)后:

RelativeLayout rl = (RelativeLayout)findViewById(R.id.someRelativeLayout); 
rl.someMethod();

答案 4 :(得分:1)

如果您想获取对创建的布局的访问权限,请向您的xml添加id并使用findViewById 像这样:

在xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:id="@+id/id">
</RelativeLayout>

在java中

RelativeLayout rl = (RelativeLayout)findViewById(R.id.id);

如果要从xml创建布局,则应使用此代码

LayoutInflater inflater = (LayoutInflater) this.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

RelativeLayout layout = inflater.inflate(R.layout.activity_main, parent_view, false); //parent view is your activity view