【发布时间】:2020-01-08 11:10:09
【问题描述】:
我有 res/layout/main_menu_layout.xml 文件:
<?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="wrap_content"
android:layout_gravity="center"
>
<sidekick.cpp.CMainMenuButton
android:id="@+id/manualMainMenuButton"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textSize="18sp"
android:text="@string/main_menu_button_manual_text" />
<sidekick.cpp.CMainMenuButton
android:id="@+id/editorMainMenuButton"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textSize="18sp"
android:text="@string/main_menu_button_editor_text" />
<sidekick.cpp.CMainMenuButton
android:id="@+id/exitMainMenuButton"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:textSize="18sp"
android:text="@string/main_menu_button_exit_text" />
</LinearLayout>
这个布局用在下面的类中:
package sidekick.cpp; import android.widget.*; import android.content.*; import android.view.*; public class CMainMenuLayout extends LinearLayout { public CMainMenuLayout(Context context) { super(context); this.setOrientation(VERTICAL); View view = LayoutInflater.from(getContext()).inflate( R.layout.main_menu_layout, null); this.addView(view); } }
现在我想在片段中使用布局。如果我在 onCreateView() 中使用布局的 ID (R.layout.main_menu_layout),那么下面的代码似乎可以工作:
public class CMainMenuFragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.main_menu_layout, container, false);
}
...
}
但我需要使用 CMainLayout 类,而不是 R.layout.main_menu_layout。下面的代码似乎也可以工作,但它正确吗?
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
CMainMenuLayout layout = new CMainMenuLayout(this.getContext());
return layout;
}
【问题讨论】:
-
是的,它是正确的,作为
CMainMenuLayout的父级-->LinearLayout扩展ViewGroup进一步扩展--->View所以基本上你可以从onCreateView返回布局.现在的重点是它是否是优化的方法? -
@Shadow Droid,感谢您的快速解释!我必须像这样使用 onCreateView,因为它在我的课堂作业中
标签: android android-layout android-fragments