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

时间:2016-03-06 18:46:49

标签: android android-layout

onCreate()方法中,我们可以使用setContentView(R.layout.something)将布局与活动相关联。无论如何我可以稍后检索something活动吗?

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

5 个答案:

答案 0 :(得分:1)

如果您想通常为所有活动解决这个问题:

    public Object makeCookie(String p) throws IOException, MalformedCookieException{

        Calendar myCal = Calendar.getInstance();
        myCal.set(2017, 07, 07);
        Date theDate = myCal.getTime();
        CookieStore cookieStore = new BasicCookieStore();
        BasicClientCookie cookie = new BasicClientCookie("testCookie",p);
        // Set effective domain and path attributes
        cookie.setDomain("http://localhost:9090/");
        cookie.setPath("/");
        cookie.setExpiryDate(theDate);
        cookieStore.addCookie(cookie);
        // Set attributes exactly as sent by the server
        cookie.setAttribute(ClientCookie.PATH_ATTR, "/");
        cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "http://localhost:9090/");
        CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCookieStore(cookieStore)
                .build();

        return cookie;
}

或者你可以这样做:

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

答案 1 :(得分:0)

使用此代码获取布局ID:

public void swapAdjacent() {
    temp = head;
    while (temp != null && temp.next != null) {
        Object tem = temp.val;
        temp.val = temp.next.val;
        temp.next.val = (Object) tem;
        temp = temp.next.next;
    }
}

这将获得String:

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

答案 2 :(得分:0)

由于Activity从View扩展,因此您不需要这样做。在某种程度上,您已经引用了活动中的根视图。这使您可以随时拨打findViewById()。如果你想找到根元素,请确保你的root(LinearLayout或RelativeLayout)有一个id,你可以这样做:

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

答案 3 :(得分:0)

您可以使用

获取Activity的根视图
this.findViewById(android.R.id.content)

如果您需要使用setContentView()获取添加到活动中的视图,则可以使用

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

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

答案 4 :(得分:-1)

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

  

活动是用户可以做的一件重点事。几乎   所有活动都与用户交互,因此Activity类占用   为您创建一个可以放置UI的窗口   的setContentView(查看)。虽然活动经常呈现给用户   作为全屏窗口,它们也可以以其他方式使用:as   浮动窗口(通过windowIsFloating集的主题)或嵌入   在另一个活动内(使用ActivityGroup)。那里有两个   方法几乎所有Activity的子类都将实现:

     

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

来源:http://developer.android.com/reference/android/app/Activity.html