我是Android开发的新手,所以我希望这是一个简单的问题。我试图实现以下目标:
我不清楚如何将动态创建的片段设置为相对于屏幕具有高度,但仍然允许比屏幕更适合的片段。我已经考虑过设置重量和重量,但是不确定这是否有用,因为我希望对所有碎片赋予相同的权重。
我看过代码示例涉及将片段的布局参数设置为片段的onCreateView()中的LinearLayout.LayoutParams实例。如果解决方案涉及到这个问题,那么如何处理片段在不同类型的布局中使用的可能性?片段需要知道它包含的内容对我来说似乎是对的。
感谢您的帮助
答案 0 :(得分:0)
回答你的观点:
您使用dimens.xml
文件中设置的维度,并根据设备的dpi设置(xhdip,xxhdip,xx等)覆盖该维度。您还可以通过指定特定的屏幕宽度来覆盖。考虑到您的边距和填充,您将可用空间除以3,这是您的宽度。
您想要做的事情听起来更像是使用水平滚动ListView而不是ScrollView,但两者都可以实现。如果使用ScrollView,您只需将每个View类型手动添加到rootView。
您不需要为不同的布局创建不同的片段。您可以创建一个片段类,在构造函数中将布局文件传递给它。您还应该使用ViewHolder模式来简化片段/布局关系。这样,通过少量逻辑,您可以拥有1个处理数十种不同布局的片段。
视图持有者只是一个具有公共方法/属性的POJO类;一个例子:
public class MyViewHolder {
public TextView myTextView;
public MyViewHolder(View rootView) {
myTextView = (TextView) rootView.findViewById(R.id.whatever);
}
}
然后使用以下方法绑定它:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.layout_file, container, false);
view.setTag(myViewHolder);
return view;
}
然后像这样设置视图:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
myViewHolder.myTextView.setText("Hello World!");
...
}
但问题在于 - 您的视图持有者与片段紧密耦合,因为您已经暴露了公共属性,因此您需要在片段和片段之间创建1:1的关系。观点持有人。
相反,您应该将关系解耦并在视图持有者中包含逻辑,并将其用作片段的扩展。
public interface SomeGenericViewHolder {
void doSomething();
}
接口是可选的,但在这种情况下应该使用,因为它强制执行访问包含数据的合同。
public class MyViewHolder implements SomeGenericViewHolder {
protected TextView myTextView;
public MyViewHolder(View rootView) {
myTextView = (TextView) rootView.findViewById(R.id.whatever);
}
@Override
public void doSomething() {
myTextView.setText("Hello World!");
}
然后构建你的片段:
MyFragment fragment = new MyFragment(myViewHolder);