我有一个片段,其中我正在尝试添加一个扩展LinearLayout
的类“CategoryOption”。但是,当我在onCreateView()
中执行AddView时,它什么也没显示。
这是我的片段代码:
public class ContentFragment extends Fragment {
LinearLayout navBarLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.content_fragment, container, false);
navBarLayout = (LinearLayout) view.findViewById(R.id.navbar_layout);
navBarLayout.addView(new CategoryOption(getActivity(), R.drawable.ic_action_rss, "RSS Feed"));
return view;
}
}
这是我的content_fragment xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/navbar_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:background="@android:color/darker_gray"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="RadioButton" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
</LinearLayout>
这是我的CategoryOption类:
public class CategoryOption extends LinearLayout {
int iconId;
String optionName;
LinearLayout optionLayout;
TextView tvOption;
ImageView ivIcon;
public CategoryOption(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public CategoryOption(Context context, int iconId, String optionName) {
super(context);
this.iconId = iconId;
this.optionName = optionName;
optionLayout = new LinearLayout(context);
tvOption = new TextView(context);
ivIcon = new ImageView(context);
setupLayout();
setupTextView();
setupImageView();
optionLayout.addView(ivIcon);
optionLayout.addView(tvOption);
}
private void setupImageView() {
// TODO Auto-generated method stub
LayoutParams params = new LayoutParams(36, 36);
params.setMargins(0, 0, 0, 4);
ivIcon.setLayoutParams(params);
ivIcon.setImageResource(iconId);
}
private void setupLayout() {
// TODO Auto-generated method stub
optionLayout.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
optionLayout.setOrientation(LinearLayout.VERTICAL);
optionLayout.setGravity(Gravity.CENTER);
optionLayout.setPadding(4, 4, 4, 4);
optionLayout.setBackgroundColor(Color.parseColor("#DEDEDE"));
}
private void setupTextView() {
// TODO Auto-generated method stub
tvOption.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tvOption.setTextColor(Color.parseColor("#111111"));
tvOption.setText(optionName);
}
public int getIconId() {
return iconId;
}
public String getOptionName() {
return optionName;
}
}
答案 0 :(得分:0)
由于您的CategoryOption
视图正在扩展LinearLayout,请尝试删除您的optionLayout
字段并将代码更改为更像这样的内容:
public CategoryOption(Context context, int iconId, String optionName) {
super(context);
this.iconId = iconId;
this.optionName = optionName;
tvOption = new TextView(context);
ivIcon = new ImageView(context);
setupLayout();
setupTextView();
setupImageView();
addView(ivIcon);
addView(tvOption);
}
private void setupLayout() {
// TODO Auto-generated method stub
setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
setOrientation(LinearLayout.VERTICAL);
setGravity(Gravity.CENTER);
setPadding(4, 4, 4, 4);
setBackgroundColor(Color.parseColor("#DEDEDE"));
}
看起来你正在做的是创建对另一个LinearLayout(似乎没必要)的引用来显示TextView和ImageView,当你应该将这些视图添加到CategoryOption View本身时。
答案 1 :(得分:0)
更改为
public class CategoryOption extends LinearLayout {
int iconId;
String optionName;
LinearLayout optionLayout;
TextView tvOption;
ImageView ivIcon;
public CategoryOption(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public CategoryOption(Context context, int iconId, String optionName) {
super(context);
this.iconId = iconId;
this.optionName = optionName;
tvOption = new TextView(context);
ivIcon = new ImageView(context);
setupLayout();
setupTextView();
setupImageView();
addView(ivIcon);
addView(tvOption);
}
private void setupImageView() {
// TODO Auto-generated method stub
LayoutParams params = new LayoutParams(36, 36);
params.setMargins(0, 0, 0, 4);
ivIcon.setLayoutParams(params);
ivIcon.setImageResource(iconId);
}
private void setupLayout() {
// TODO Auto-generated method stub
this.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
this.setOrientation(LinearLayout.HORIZONTAL);
this.setGravity(Gravity.CENTER);
this.setPadding(4, 4, 4, 4);
this.setBackgroundColor(Color.parseColor("#DEDEDE"));
}
private void setupTextView() {
// TODO Auto-generated method stub
tvOption.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tvOption.setTextColor(Color.parseColor("#111111"));
tvOption.setText(optionName);
}
或删除扩展的LinearLayout并使用名为getLayout的方法并返回optionLayout
public class CategoryOption {
int iconId;
String optionName;
LinearLayout optionLayout;
TextView tvOption;
ImageView ivIcon;
Context context;
public CategoryOption(Context context) {
this.context =context;
// TODO Auto-generated constructor stub
}
public CategoryOption(Context context, int iconId, String optionName) {
this.context=context;
this.iconId = iconId;
this.optionName = optionName;
optionLayout = new LinearLayout(context);
tvOption = new TextView(context);
ivIcon = new ImageView(context);
}
public LinearLayout getLayout()
{
LayoutParams params = new LayoutParams(36, 36);
params.setMargins(0, 0, 0, 4);
ivIcon.setLayoutParams(params);
ivIcon.setImageResource(iconId);
optionLayout.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
optionLayout.setOrientation(LinearLayout.VERTICAL);
optionLayout.setGravity(Gravity.CENTER);
optionLayout.setPadding(4, 4, 4, 4);
optionLayout.setBackgroundColor(Color.parseColor("#DEDEDE"));
tvOption.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tvOption.setTextColor(Color.parseColor("#111111"));
tvOption.setText(optionName);
optionLayout.addView(ivIcon);
optionLayout.addView(tvOption);
return optionLayout;
}
}