Android 如何获取与活动关联的布局的名称?

Android 如何获取与活动关联的布局的名称?,android,android-layout,Android,Android Layout,在onCreate()方法中,我们可以使用setContentView(R.layout.something)将布局与活动相关联。我是否可以在以后为某项活动检索某些内容 我知道我可以使用this.findViewById(android.R.id.content).getRootView()来获取活动的内容视图,但不确定从那里我是否可以获取一些东西?你可以在任何活动中的任何方法中使用setconnetview(R.layout.content),只要content.xml作为布局文件存在于布局目

onCreate()
方法中,我们可以使用
setContentView(R.layout.something)
将布局与活动相关联。我是否可以在以后为某项活动检索
某些内容


我知道我可以使用
this.findViewById(android.R.id.content).getRootView()
来获取活动的内容视图,但不确定从那里我是否可以获取
一些东西?

你可以在任何活动中的任何方法中使用
setconnetview(R.layout.content)
,只要
content.xml
作为布局文件存在于布局目录中

活动是用户可以做的一件专注的事情。几乎 所有活动都与用户交互,因此Activity类 为您创建一个窗口,您可以在其中使用 setContentView(视图)。而活动通常呈现给用户 作为全屏窗口,它们也可以以其他方式使用:如 浮动窗口(通过带有windowIsFloating set的主题)或嵌入式 在另一个活动的内部(使用ActivityGroup)。有两个 方法几乎所有活动子类都将实现:

onCreate(Bundle)是初始化活动的地方。最 重要的是,这里通常使用 布局资源定义您的UI,并使用findViewById(int)来 检索UI中需要与之交互的小部件 以编程方式。onPause()是处理用户离开的地方 你的活动。最重要的是,用户所做的任何更改都应该 此时,提交(通常提交给持有 数据)。要与Context.startActivity()一起使用,所有活动类 必须在其包的 AndroidManifest.xml


来源:

使用此代码获取布局id:

this.findViewById(android.R.id.content).getRootView().getId()
要获取字符串,请执行以下操作:

getResources().getResourceName()

因为活动是从视图扩展的,所以不需要这样做。在某种程度上,您已经在引用活动中的根视图。这就是允许您随时调用
findviewbyd()。如果要查找根元素,请确保根元素(LinearLayout或RelativeLayout)具有id,并且可以执行以下操作:

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

您可以使用以下方法获取
活动的根视图

this.findViewById(android.R.id.content)
如果需要使用
setContentView()
获取添加到活动中的视图,可以使用

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

但是,您也可以使用xml根元素中使用的相同id。

当您希望为所有活动解决此问题时:

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

我想这并没有回答我的问题,我想问的是,假设您使用
setConetentView(R.layout.content)
,然后给定一个
活动
,您有没有办法检索传递给
setConetentView
R.layout.content
?这里的“某物”是指视图的
id
属性?如果是这样,则只需调用
getId()
,它将返回
int
值。要将其作为
字符串
,请在这个问题中使用Blackbelt的答案:这并没有回答我的问题。问题是我没有
R.layout.activity\u main
,我想稍后检索它,我无法按照您在第一部分中的建议更改源代码。