Как выровнять по горизонтали некоторые программно добавленные виды?

1

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

Изображение 174551

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

Изображение 174551

Я хочу показать 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;
    }
  }
Теги:
alignment
android-layout

2 ответа

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;
    }
  • 0
    Спасибо Работает нормально. Отличный ответ.
  • 0
    button.setId (2000 + sCount); Можете ли вы просто сказать мне, что толку от этого?
Показать ещё 8 комментариев
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>
  • 0
    первый вид меняется на горизонтальный, и когда я добавляю текст, он не показывает ничего
  • 0
    покажи свой main.xml.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню