Урок 17. Создание View-компонент в рабочем приложении
Урок 17. Создание View-компонент в рабочем приложении
В этом уроке мы:
- добавляем компоненты на экран прямо из приложения
Click here to read this article!
- добавляем компоненты на экран прямо из приложения
Click here to read this article!
Последний раз редактировалось damager82 28 апр 2017, 10:54, всего редактировалось 9 раз.
Re: Урок 17. Создание View-компонент в рабочем приложении
после строки llMain.addView(btnNew, lParams);
можно дописать etName.setText(null);
чтобы текстовое поле очищалось после создания каждой кнопки.
-
- Сообщения: 2
- Зарегистрирован: 19 янв 2012, 00:59
Re: Урок 17. Создание View-компонент в рабочем приложении
Отличный урок) Спасибо
У себя добавил проверку на то чтобы кнопок было не больше 6) а то они дальше не лезут(3.2" экран)) а ScrolView почему-то не получилось использовать. Еще добавил имена кнопок по дефолту, в моем случае Button1-6
И возник вопрос, как сделать проверку на то чтобы строка не была пустой? не дало результата как и
У себя добавил проверку на то чтобы кнопок было не больше 6) а то они дальше не лезут(3.2" экран)) а ScrolView почему-то не получилось использовать. Еще добавил имена кнопок по дефолту, в моем случае Button1-6
И возник вопрос, как сделать проверку на то чтобы строка не была пустой?
Код: Выделить всё
if(etName.getText() != null){...}
Код: Выделить всё
if(etName.getText().toString() != null){...}
Re: Урок 17. Создание View-компонент в рабочем приложении
С помощью TextUtils.isEmpty можноMADSMILEXD писал(а):как сделать проверку на то чтобы строка не была пустой?
http://developer.android.com/reference/ ... rSequence)
-
- Сообщения: 2
- Зарегистрирован: 19 янв 2012, 00:59
Re: Урок 17. Создание View-компонент в рабочем приложении
к сожалению с этим разобраться не получилось, воспользовался таким
Код: Выделить всё
if(etName.length() != 0){...}else{...}
Re: Урок 17. Создание View-компонент в рабочем приложении
Посмотрите урок 19, про калькулятор. Там я этим способом делаю проверку на пустоту полей.
-
- Сообщения: 1
- Зарегистрирован: 16 фев 2012, 00:11
Re: Урок 17. Создание View-компонент в рабочем приложении
Код: Выделить всё
case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
Можно немного уменьшить код и потребление памяти, если прямо в case R.id.rbLeft: делать вместо
Код: Выделить всё
btnGravity = Gravity.LEFT;
Код: Выделить всё
lParams.gravity = Gravity.LEFT;
Re: Урок 17. Создание View-компонент в рабочем приложении
Отдельно спасибо за настройку "Android Keyboard" ))))))
Re: Урок 17. Создание View-компонент в рабочем приложении
Я не совсем понял, зачем Вы здесь используете LinearLayout.LayoutParams.WRAP_CONTENT? если все скодили уже в main.xmlЯ также создал переменную wrapContent и буду хранить в ней значение LinearLayout.LayoutParams.WRAP_CONTENT. Делаю это только для снижения громоздкости кода.
И еще такой вопросик относящийся к 16 уроку по поводу LayoutParams. Вот ViewGroup.LayoutParams это тоже самое что и LinearLayout в main.xml? и на сколько программный метод лучше не программного?
Re: Урок 17. Создание View-компонент в рабочем приложении
Когда я добавляю новый View-компонент (btnNew), я должен указать для него ширину и высоту (wrap_content в данном случае). Иначе он просто не будет знать как ему отображаться - растянуться на всю ширину/высоту родительского элемента или принять ширину/высоту по значению.patalaka писал(а):Я не совсем понял, зачем Вы здесь используете LinearLayout.LayoutParams.WRAP_CONTENT? если все скодили уже в main.xml
А в main.xml все настроено только для тех компонентов, которые в нем указаны.
Re: Урок 17. Создание View-компонент в рабочем приложении
LayoutParams - это набор свойств для View-компонента (высота, ширина, ...). Эти свойства будут определять как компонент будет размещен в ViewGroup. Я в уроке показал, что View-компонент, находящийся в LinearLayout имеет один набор layout-параметров, а находящийся в RelativeLayout – другой набор. Это происходит потому, что LayoutParams для компонента определяются родительским компонентом ViewGroup. Для LinearLayout - это LinearLayout.LayoutParams (вложенный класс), а для RelativeLayout - RelativeLayout.LayoutParams (вложенный класс).patalaka писал(а):Вот ViewGroup.LayoutParams это тоже самое что и LinearLayout в main.xml? и на сколько программный метод лучше не программного?
Соответственно LinearLayout - это ViewGroup, которая позволяет размещать в себе элементы, а LinearLayout.LayoutParams - правила, по которым они будут размещены.
ViewGroup.LayoutParams - это базовый класс, для остальных LayoutParams.
Программный способ не то, что бы лучше. Он просто позволяет сделать более гибкие вещи во время выполнения программы. А если экран статичен, то гораздо проще использовать layout-файлы.
Re: Урок 17. Создание View-компонент в рабочем приложении
спасибо теперь все более понятно
Re: Урок 17. Создание View-компонент в рабочем приложении
Доброго времени суток. Не подскажете, в чем проблема? Очень хочу, что-бы TextView message добавилось в my_list по нажатию кнопки save.
main.xml
.java файл
Ну никак не хочет добавляться message в my_list
Заранее, спасибо.
main.xml
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id ="@+id/suka"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id = "@+id/input_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType = "text" />
<TextView
android:id = "@+id/tv_x"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="100dp" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save_score" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clear" />
<Button
android:id="@+id/button3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/plus_one" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
Код: Выделить всё
package com.danja;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Button;
import android.view.View.OnClickListener;
import android.os.Bundle;
public class My_first_app_Activity extends Activity {
/** Called when the activity is first created. */
public TextView text;
public TextView message;
public EditText input_text;
public LinearLayout my_list;
public Button plus_button;
public Button clear_button;
public Button save_button;
public OnClickListener plus_click;
public OnClickListener clear_click;
public OnClickListener save_click;
int total_count = 0;
int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
input_text = (EditText)findViewById(R.id.input_text);
text = (TextView)findViewById(R.id.tv_x);
my_list = (LinearLayout)findViewById(R.id.my_list);
save_button = (Button)findViewById(R.id.button1);
clear_button = (Button)findViewById(R.id.button2);
plus_button = (Button)findViewById(R.id.button3);
text.setText("" + total_count + "");
plus_click = new OnClickListener() {
public void onClick(View v) {
total_count++;
text.setText("" + total_count + "");
}
};
clear_click = new OnClickListener() {
public void onClick(View v) {
total_count = 0;
text.setText("" + total_count + "");
}
};
save_click = new OnClickListener() {
public void onClick(View v) {
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(wrapContent, wrapContent);
message.setText("asdasda");
message.setLayoutParams(lParams);
my_list.addView(message, lParams);
}
};
plus_button.setOnClickListener(plus_click);
clear_button.setOnClickListener(clear_click);
save_button.setOnClickListener(save_click);
}
}
Заранее, спасибо.
Re: Урок 17. Создание View-компонент в рабочем приложении
Обратите внимание на объект message. Вы его нигде не создаете, но пытаетесь присвоить ему текст и добавить на экран. Приложение валится.i00lii писал(а):Очень хочу, что-бы TextView message добавилось в my_list по нажатию кнопки save. Ну никак не хочет добавляться message в my_list
Надо создавать объект:
Код: Выделить всё
message = new TextView(My_first_app_Activity.this);
Re: Урок 17. Создание View-компонент в рабочем приложении
Спасибо за помощь. Просто я думал, что объявив поле в начале, уладил все формальности.
Re: Урок 17. Создание View-компонент в рабочем приложении
Здраствуйте...интересный вопрос - если сменить ориентацию, то динамические обекты исчезают...как сохранить новосозданую иерархию Views
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 17. Создание View-компонент в рабочем приложении
При повороте экрана Activity уничтожается и пересоздается заного, все элементы, созданные во время ее работы, пропадут. Отменить пересоздание можно в файле манифеста, в свойствах активности: android:configChanges="orientation"
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 17. Создание View-компонент в рабочем приложении
Урок 70 рассказывает, как быть при повороте. Иерархию Views (если она отлична от layout-файла) я думаю придется заново создавать после поворота.DenBond7 писал(а):Здраствуйте...интересный вопрос - если сменить ориентацию, то динамические обекты исчезают...как сохранить новосозданую иерархию Views
Re: Урок 17. Создание View-компонент в рабочем приложении
Очепятка. Походу я первый внимательно прочитал
Рассмотрим подробно экран.
rgGravity – это RadoiGroup
Re: Урок 17. Создание View-компонент в рабочем приложении
Пасибо, пофиксил )Flactor писал(а):Очепятка. Походу я первый внимательно прочитал