如何从其他布局

时间:2015-12-31 00:13:19

标签: android

关注this tutorial我将ActionBar(工具栏)从我的主布局移动到另一个布局,并将工具栏包含在我的主布局中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.marcelo.notemuevas.MainActivity">
<include
    layout="@layout/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/my_toolbar">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Servicios"
        android:id="@+id/serviciosTxt"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@color/colorPrimaryDark"
        android:textColor="#FFFFFF"
        android:gravity="center"
        android:paddingTop="18dp"
        android:paddingBottom="18dp"
        />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/serviciosTxt">
    </ListView>

</RelativeLayout>
</RelativeLayout>

我的工具栏布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/CustomActionBarTheme"/>
</LinearLayout>

但是我收到了以下错误 enter image description here 如果它具有相同的ID,为什么我无法引用我的工具栏?我可以包含我的工具栏并进行参考,以便我可以将元素放在工具栏下面吗?

编辑1 - 活动代码

package com.marcelo.notemuevas;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[] itemname ={
            "Carpinteria"
    };
    String[] descripcion={
            "Reparación"
    };

    Integer[] imgid={
            R.mipmap.icono1
    };
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
        myToolbar.setLogo(R.mipmap.ic_launcher);
        CustomListAdapter adapter = new CustomListAdapter(this, itemname, imgid, descripcion);
        list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub
                String Slecteditem = itemname[position];
                Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();
                Intent myIntent = new Intent(MainActivity.this, carpinteria.class);
                myIntent.putExtra("key", 5); //Optional parameters
                MainActivity.this.startActivity(myIntent);
            }
        });
    }

    public boolean onCreateOptionsMenu(Menu menu){
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }
}

编辑2 - 解决方案

现在我让它工作了,我在include中添加了一个新ID,然后我像James Lockhart和PhanVănLinh建议的那样引用它(不知道为什么第一次没用)所以我的新问题是,ID工作像变量?只存在于声明的地方?

这是工作的xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.marcelo.notemuevas.MainActivity">
<include
    layout="@layout/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/toolbarLayout"
    />
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/toolbarLayout">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Servicios"
        android:id="@+id/serviciosTxt"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@color/colorPrimaryDark"
        android:textColor="#FFFFFF"
        android:gravity="center"
        android:paddingTop="18dp"
        android:paddingBottom="18dp"
        />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/serviciosTxt">
    </ListView>

</RelativeLayout>
</RelativeLayout>

2 个答案:

答案 0 :(得分:2)

在您的XML

<include
    android:id=@"+id/toolBarLayout" // set the id for layout that contains toolbar
    layout="@layout/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@id/toolBarLayout"> // change my_toolbar to toolBarLayout

然后您可以通过更改

访问Toolbar
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);

LinerLayout myLinear = (LinerLayout) findViewById(R.id.toolBarLayout);
Toolbar myToolbar = (Toolbar) myLinear.findViewById(R.id.my_toolbar);

答案 1 :(得分:0)

请试试这个:

  1. 在工具栏布局文件的LinearLayout标记中,将'android:id'属性设置为唯一的布局ID名称,例如:android:id =“@ + id / toolbarLayout”

  2. 完成(1)后,在主布局中参考工具栏布局文件,如下所示:android:layout_below =“@ id / toolbarLayout”

  3. 希望这有帮助。