2012-06-16 6 views
0

Попытка создать черную линию в моем представлении, чтобы разделить текстовые блоки, но не отображаться. Текст отображается как должен, но я не вижу строки.Android 2.3.3, создать линию в виде

EDIT: Были протестированы, чтобы добавить динамически, как предлагается, а также изменить мой код, но все еще нет строки? Я что-то упускаю?

Кроме того, это внутри фрагмента, класс расширяет 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); 
} 
} 

ответ

1

вам нужно создать View программно делать?

Простой подход создает вид со следующими атрибутами

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

Если создать новый файл XML с именем line.xml вы можете использовать LayoutInflater, чтобы получить представление динамически:

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

Эта версия приведет к значительно более чистым кодам, поскольку система выполняет всю работу за вас.

+0

Необходимо сделать это программно, так как я добавляю неизвестное количество просмотров. Элементы поступают из базы данных. – Patrick

+0

Вы все же можете раздуть этот XML-вид программно и использовать его динамически. Код будет намного чище. Подробнее см. В разделе «Редактирование». – Tim

+0

Пробовал, но по какой-то причине он по-прежнему не печатает строку. – Patrick

0

В параметрах Layout вы должны установить высоту в 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 будет складывать представления, как по горизонтали, так и по вертикали, в том порядке, в котором они будут добавлены.

+0

Пробовал, но без разницы. Он все еще не печатает строку? – Patrick

+0

Какой у вас цвет фона? – wdziemia

+0

Белый, изменил линию на фиолетовый, чтобы выделиться. – Patrick

0

Я сделал что-то подобное, я думаю, и простой способ - перезаписать класс компонента, особенно метод onDraw(), который вы хотите иметь разделитель строк.

Я думаю, что ваша цель слишком добавить черную линию в конце каждого TextView, так что вы можете сделать следующее:

1) Создать Png черной линии

2) объявить класс, расширяющий TextView и overwrinting метод OnDraw и выполнив следующие действия ==>

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.

Я не знаю, подходит ли это решение для вас, но я думаю, что это нормально, тогда линия динамически создается каждый раз, когда вы создаете этот текст.

Надеюсь, это поможет.

+0

Проблема в том, что это не всегда текстовое представление. Я также добавляю изображения на лету. Возможно, тогда создадим класс, который наследует от TextView, но только печатает строку и ничего больше. Но насколько велика эта линия? 200px? 1000px? – Patrick

+0

Я отредактировал мой код: когда я создаю растровое изображение, теперь он имеет ширину вашего компонента. Чтобы ответить на вопрос, это просто пойти на линию loooong, это подойдет в любом случае. И о том, что вы на лету добавляете, вы можете просто расширить компонент/many и перезаписать метод onDraw(). Вы можете в принципе добавить строку в конце каждого компонента, который вы хотите. –