Вопрос по android-layout, android – Как выровнять по горизонтали некоторые программно добавленные виды?

1

Я разработал макет, как на рисунке ниже:

image

После ввода текста вEditTextкогда я нажимаюAdd+ Button TextView а такжеButton будет добавлено, как показано на рисунке ниже:

image

Я хочу показатьButton на правой сторонеTextView, Как мне это сделать? Другой вопрос, как мне удалить соответствующиеView когда пользователь нажимает кнопку? Код:

 public class ExampleActivity extends Activity {
    private LinearLayout mLayout;
    private EditText mEditText;
    private Button mButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mLayout = (LinearLayout) findViewById(R.id.linearLayout);
        mEditText = (EditText) findViewById(R.id.editText);
        mButton = (Button) findViewById(R.id.button);
        mButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                mLayout.addView(createNewTextView(mEditText.getText()
                        .toString()));
                mLayout.addView(createNewButton());
            }
        });

    }

    private TextView createNewTextView(String text) {
        final LayoutParams lparams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        final TextView textView = new TextView(this);
        textView.setLayoutParams(lparams);
        textView.setText("New text: " + text);
        return textView;
    }

    private Button createNewButton() {
        final LayoutParams lparams = new LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        final Button button = new Button(this);
        button.setLayoutParams(lparams);
        button.setText(" - ");
        return button;
    }
  }

Ваш Ответ

2   ответа
1

LinearLayout со свойством Orientation для выравнивания элемента управления по вертикали / горизонтали так что просто установите ориентацию того же

http://developer.android.com/reference/android/widget/LinearLayout.html

 mLayout = (LinearLayout) findViewById(R.id.linearLayout);
 mLayout.setOrientation(LinearLayout.HORIZONTAL);

обновленный

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

<LinearLayout   
        android:id="@+id/linearLayout" 
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content" /> 

<EditText   
        android:id="@+id/editText" 
        android:layout_width="293dp"   
        android:layout_height="wrap_content" > 
        <requestFocus /> </EditText> 

 <Button android:id="@+id/button" 
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Add+" />

 </LinearLayout>
когда я добавляю больше одного, он должен показываться один за другим, но он показывает все с правой стороны представления. Harish
замените свой main.xml моим обновленным ответом.
первый вид меняется на горизонтальный, и когда я добавляю текст, он ничего не показывает Harish
покажи свой main.xml.
& lt;? xml version = "1.0" Кодирование = & Quot; UTF-8 & Quot;? & GT; & lt; LinearLayout xmlns: android = & quot;schemas.android.com/apk/res/android& Quot; андроид: идентификатор = & Quot; + идентификатор / LinearLayout & Quot; Android: layout_width = & Quot; fill_parent & Quot; Android: layout_height = & Quot; fill_parent & Quot; & GT; & lt; EditText android: id = & quot; @ + id / editText & quot; Android: layout_width = & Quot; 293dp & Quot; Android: layout_height = & Quot; wrap_content & Quot; & GT; & lt; requestFocus / & gt; & Lt; / EditText & GT; & lt; Кнопка android: id = & quot; @ + id / button & quot; Android: layout_width = & Quot; wrap_content & Quot; Android: layout_height = & Quot; wrap_content & Quot; Android: текст = & Quot; Добавить + & Quot; / & GT; & Lt; / LinearLayout & GT; Harish
1

TextViews а такжеButtons сложены, потому что вы, вероятно, используетеLinearLayout с ориентациейvertical, Вы могли бы обернутьTextView + Button вLinearLayout а затем добавить этоLinearLayout на ваш собственный макет или вы могли бы использоватьTableLayout как показано ниже (я добавил несколько идентификаторов, чтобы вы могли удалять нужные строки):

public class SomeActivity extends Activity {

    private EditText mInput;
        private TableLayout mTable;
        private static int sCount = 0;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button addButton = (Button) findViewById(R.id.add);
            mInput = (EditText) findViewById(R.id.editText1);
            mTable = (TableLayout) findViewById(R.id.table1);
            addButton.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    mTable.addView(addRow(mInput.getText().toString()));
                }
            });
        }

        private TableRow addRow(String s) {
            TableRow tr = new TableRow(this);
            tr.setId(1000 + sCount);
            tr.setLayoutParams(new TableLayout.LayoutParams(
                    TableLayout.LayoutParams.FILL_PARENT,
                    TableLayout.LayoutParams.WRAP_CONTENT));
            TableRow.LayoutParams tlparams = new TableRow.LayoutParams(
                    TableRow.LayoutParams.WRAP_CONTENT,
                    TableRow.LayoutParams.WRAP_CONTENT);
            TextView textView = new TextView(this);
            textView.setLayoutParams(tlparams);
            textView.setText("New text: " + s);
            tr.addView(textView);
            TableRow.LayoutParams blparams = new TableRow.LayoutParams(
                    TableRow.LayoutParams.WRAP_CONTENT,
                    TableRow.LayoutParams.WRAP_CONTENT);
            final Button button = new Button(this);
            button.setLayoutParams(blparams);
            button.setText(" - ");
            button.setId(2000 + sCount);
            button.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {               
                    mTable.removeView(findViewById(v.getId() - 1000));
                }           
            });
            tr.addView(button);
            sCount++;
            return tr;
    }

}

гдеmain файл макета:

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

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

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/add"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TableLayout
            android:id="@+id/table1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </TableLayout>
    </LinearLayout>

</ScrollView>

Если по какой-либо причине вам не нравитсяTableLayout использоватьLinearLayout обернуть тебяTextView а такжеButton с файлом макета выше (и, конечно, удалитеTableLayout):

//...
ll = (LinearLayout) findViewById(R.id.parent);
        addButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //where ll is the LinearLayout with the id parent
                ll.addView(addRow(mInput.getText().toString()));
            }
        });
    }

    private LinearLayout addRow(String s) {
        LinearLayout tr = new LinearLayout(this);
        tr.setId(1000 + sCount);
        tr.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT));
        LinearLayout.LayoutParams tlparams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        TextView textView = new TextView(this);
        textView.setLayoutParams(tlparams);
        textView.setText("New text: " + s);
        tr.addView(textView);
        LinearLayout.LayoutParams blparams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        final Button button = new Button(this);
        button.setLayoutParams(blparams);
        button.setText(" - ");
        button.setId(2000 + sCount);
        button.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {               
                ll.removeView(findViewById(v.getId() - 1000));
            }           
        });
        tr.addView(button);
        sCount++;
        return tr;
    }
@ user1398150 Фактическая настройкаid дляButton Это очень важно, если вы хотите удалить строки. Как видите, вonClick метод я получаюid отv(который представляет собойButton это было нажано). Потому что я знаю, чтоid изButton этоid из вмещающихTableRow/LinearLayout + 1000, легко найтиView удалить.
Я понял это, но подумал, что для кнопки это не нужно. Поэтому я и спросил вас. Хорошо, в любом случае, спасибо. Harish
Спасибо. Работает нормально. Отличный ответ. Harish
button.setId (2000 + sCount); Можете ли вы просто сказать мне, что толку от этого? Harish
@ user1398150 Для того чтобы удалитьViews Из макета нужна ссылка на них. Эта ссылка являетсяid что я поставил. Когда вы добавляете новую строку в свой макет (TextView а такжеButton) Я поставилint значение в качестве идентификатора (1000 + sCount, где sCount увеличивается каждый раз, поэтому строки имеют идентификаторы, такие как 1000, 1001, 1002 и т. д.). Я также установилid из2000 + sCount(2000, 2001, 2002 и т. Д.) ДляButton знать, какойButton из какой строки была нажата.

Похожие вопросы