Добавленные представления отображаются в верхней части экрана

#android #xml

#Android #xml

Вопрос:

Я пытался добавить несколько текстовых представлений и кнопок при onClick, и это лучший код, который я нашел, который действительно работает:

     RelativeLayout relative = (RelativeLayout) findViewById(R.id.RelativeLayout01);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            (LayoutParams.WRAP_CONTENT), (LayoutParams.WRAP_CONTENT));

    TextView tv = new TextView(getApplicationContext());
    tv.setLayoutParams(lp);
    tv.setText("Shift"   mShiftCount);

    EditText edittv = new EditText(getApplicationContext());
    edittv.setLayoutParams(lp);

    relative.addView(tv);
    relative.addView(edittv);
 

Кажется, это лучший код для добавления дополнительных элементов, похожих на те, что у меня уже есть в моем main.XML досье.
Моя проблема в том, что когда они добавляются, они появляются в верхней части экрана, и я не уверен, как добавить дополнительные параметры к объектам.
Как бы мне разместить textview и edittext под моими другими элементами, указанными в XML?

Ответ №1:

Что вам нужно сделать, это создать RelativeLayout.LayoutParams (см. Здесь ), когда вы добавляете такие представления, как tv и edittv, в RelativeLayout . В вашем RelativeLayout.LayoutParams , вам нужно определить те же параметры, которые вы бы дали другим вашим RelativeLayout объектам. Вот пример:

 RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.idOfWhatYouWantToBeBelowOf);
addView(tv, params);
 

Комментарии:

1. Это работает! Спасибо! У меня просто есть еще одна проблема: как мне сделать так, чтобы EditText отображался под TextView? Это не работает:

2. ‘RelativeLayout. Параметры LayoutParams = новый RelativeLayout. LayoutParams(RelativeLayout. Параметры компоновки. WRAP_CONTENT, RelativeLayout . Параметры компоновки. WRAP_CONTENT); params.addRule(RelativeLayout. НИЖЕ R.id.syncCalendar); tv.setLayoutParams(параметры); RelativeLayout. LayoutParams params2 = новый RelativeLayout. LayoutParams(RelativeLayout. Параметры компоновки. WRAP_CONTENT, RelativeLayout . Параметры компоновки. WRAP_CONTENT); params2.addRule(RelativeLayout. НИЖЕ, tv); ‘

3. Вам нужно присвоить tv объекту идентификатор, просто выполнив tv.setId(123) (или какое-то случайное число). Затем в параметрах макета просто используйте 123 в качестве идентификационного номера. Не забудьте принять этот ответ, если он показался вам полезным!

4. Работает отлично! Большое спасибо, я думал, что потратил здесь целую ночь, но это решило мои проблемы :).

Ответ №2:

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

Комментарии:

1. Мой main.xml имеет LinearLayout, ScrollView, RelativeLayout внутри этого, а затем многочисленные текстовые представления, кнопки, EditTextxs и AutoCompleteTextViews.