Android 2.3.3,在视图中创建一行

时间:2012-06-16 15:06:14

标签: java android line android-sdk-2.3

尝试在我的视图中创建一条黑色线条来分隔文本块,但它没有显示出来。 文本显示应该但我看不到该行。

编辑: 已经测试过按建议动态添加和修改我的代码但仍然没有行?我错过了什么吗?

这也是一个Fragment,类扩展了Fragment {}

Xml代码:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/travelContainer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    </LinearLayout>

</ScrollView>

Java代码:

    public class Travel extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.travel_fragment, container, false);
}


@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onViewCreated(view, savedInstanceState);

LinearLayout layout = (LinearLayout)view.findViewById(R.id.travelContainer);

        TextView text = new TextView(getActivity()); 
        int padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4, getActivity().getResources().getDisplayMetrics()); 
        text.setPadding(padding, padding, padding, padding);
        text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
        text.setTypeface(null, Typeface.BOLD);
        text.setText("TITLE");
        text.setId(123456789);
        layout.addView(text); 

        /* 
    View v = new View(getActivity());
    LinearLayout.LayoutParams viewLp = new LayoutParams(LayoutParams.FILL_PARENT,1);
    viewLp.setMargins(0, 5, 0, 5);
    v.setLayoutParams(viewLp);
    v.setBackgroundColor(0x000);
            */

    View v = getActivity().getLayoutInflater().inflate(R.layout.line, (ViewGroup)getActivity().getCurrentFocus(), false);
    layout.addView(v);


        text = new TextView(getActivity()); 
        padding = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,4, getActivity().getResources().getDisplayMetrics()); 
        text.setPadding(padding, padding, padding, padding);
        text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10);       
        text.setText("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.");
        layout.addView(text); 
}
}

3 个答案:

答案 0 :(得分:1)

您是否需要以编程方式创建视图?

一种简单的方法是创建具有以下属性的视图

<View
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:background="#000" />

如果您创建一个名为line.xml的新XML文件,则可以使用LayoutInflater动态获取视图:

View line = MyActivity.this.getLayoutInflater().inflate(R.layout.line, (ViewGroup) getCurrentFocus(), false);

该版本将为您提供更清晰的代码,因为系统可以为您完成所有工作。

答案 1 :(得分:0)

在布局参数中,您必须将高度设置为1,并将宽度设置为填充父级。您只需设置1个高度/宽度参数。请尝试以下

LinearLayout.LayoutParams viewLp = new LayoutParams(LayoutParams.FILL_PARENT,1);
viewLp.setMargins(0, 5, 0, 5);

此外,您正在使用LayoutParams作为RelativeLayout,但您使用的是LinearLayout。 LinearLayouts不支持以下内容:

viewLp.addRule(RelativeLayout.BELOW, 123456789);
viewLp.addRule(RelativeLayout.CENTER_HORIZONTAL);

使用LinearLayout.LayoutParams。 LinearLayout将按照添加顺序水平或垂直堆叠视图。

答案 2 :(得分:0)

我认为我做了类似的事情,一个简单的方法就是覆盖组件的类,特别是你想要行分隔符的onDraw()方法。

我认为您的目标是在每个textview的末尾添加一条黑线,以便您可以执行以下操作:

1)创建一个png黑线

2)声明一个扩展TextView并覆盖onDraw方法并执行以下操作的类==&gt;

private Bitmap line;

然后在构造函数中:

    line = BitmapFactory.decodeResource(context.getResources(), R.drawable.line_thin);
    line = Bitmap.createBitmap(line, 0, 0, this.getWidth(), 1);

然后在onDraw()方法上:

    canvas.drawBitmap(line, 0, this.getHeight(), null);

3)最后,您不要忘记使用您在XML中创建的类来更改组件的类型。

我不知道这个解决方案是否适合您,但我认为这是一个好的,然后每次创建Textview时动态创建该行。

希望它有所帮助。