Урок 17. Создание View-компонент в рабочем приложении

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 19 сен 2011, 03:00

В этом уроке мы:

- добавляем компоненты на экран прямо из приложения

Click here to read this article!
Последний раз редактировалось damager82 28 апр 2017, 10:54, всего редактировалось 9 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 09 янв 2012, 15:39

после строки llMain.addView(btnNew, lParams);
можно дописать etName.setText(null);
чтобы текстовое поле очищалось после создания каждой кнопки.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

MADSMILEXD
Сообщения: 2
Зарегистрирован: 19 янв 2012, 00:59

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение MADSMILEXD » 19 янв 2012, 01:08

Отличный урок) Спасибо
У себя добавил проверку на то чтобы кнопок было не больше 6) а то они дальше не лезут(3.2" экран)) а ScrolView почему-то не получилось использовать. Еще добавил имена кнопок по дефолту, в моем случае Button1-6

И возник вопрос, как сделать проверку на то чтобы строка не была пустой?

Код: Выделить всё

 if(etName.getText() != null){...} 
не дало результата как и

Код: Выделить всё

if(etName.getText().toString() != null){...}

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 19 янв 2012, 11:50

MADSMILEXD писал(а):как сделать проверку на то чтобы строка не была пустой?
С помощью TextUtils.isEmpty можно
http://developer.android.com/reference/ ... rSequence)
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

MADSMILEXD
Сообщения: 2
Зарегистрирован: 19 янв 2012, 00:59

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение MADSMILEXD » 20 янв 2012, 00:39

к сожалению с этим разобраться не получилось, воспользовался таким

Код: Выделить всё

if(etName.length() != 0){...}else{...}

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 20 янв 2012, 15:05

Посмотрите урок 19, про калькулятор. Там я этим способом делаю проверку на пустоту полей.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

sverh4elovek
Сообщения: 1
Зарегистрирован: 16 фев 2012, 00:11

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение sverh4elovek » 16 фев 2012, 00:21

Код: Выделить всё

case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
тут создается объект btnGravity, в нее записывается положение RadioGroup, затем lParams.gravity = btnGravity;
Можно немного уменьшить код и потребление памяти, если прямо в case R.id.rbLeft: делать вместо

Код: Выделить всё

btnGravity = Gravity.LEFT;
вот это:

Код: Выделить всё

lParams.gravity = Gravity.LEFT;

Аватара пользователя
Crime
Сообщения: 4
Зарегистрирован: 02 мар 2012, 18:33

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Crime » 05 мар 2012, 15:51

Отдельно спасибо за настройку "Android Keyboard" ))))))

patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение patalaka » 26 мар 2012, 19:51

Я также создал переменную wrapContent и буду хранить в ней значение LinearLayout.LayoutParams.WRAP_CONTENT. Делаю это только для снижения громоздкости кода.
Я не совсем понял, зачем Вы здесь используете LinearLayout.LayoutParams.WRAP_CONTENT? если все скодили уже в main.xml

И еще такой вопросик относящийся к 16 уроку по поводу LayoutParams. Вот ViewGroup.LayoutParams это тоже самое что и LinearLayout в main.xml? и на сколько программный метод лучше не программного?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 27 мар 2012, 08:55

patalaka писал(а):Я не совсем понял, зачем Вы здесь используете LinearLayout.LayoutParams.WRAP_CONTENT? если все скодили уже в main.xml
Когда я добавляю новый View-компонент (btnNew), я должен указать для него ширину и высоту (wrap_content в данном случае). Иначе он просто не будет знать как ему отображаться - растянуться на всю ширину/высоту родительского элемента или принять ширину/высоту по значению.

А в main.xml все настроено только для тех компонентов, которые в нем указаны.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 27 мар 2012, 09:09

patalaka писал(а):Вот ViewGroup.LayoutParams это тоже самое что и LinearLayout в main.xml? и на сколько программный метод лучше не программного?
LayoutParams - это набор свойств для View-компонента (высота, ширина, ...). Эти свойства будут определять как компонент будет размещен в ViewGroup. Я в уроке показал, что View-компонент, находящийся в LinearLayout имеет один набор layout-параметров, а находящийся в RelativeLayout – другой набор. Это происходит потому, что LayoutParams для компонента определяются родительским компонентом ViewGroup. Для LinearLayout - это LinearLayout.LayoutParams (вложенный класс), а для RelativeLayout - RelativeLayout.LayoutParams (вложенный класс).

Соответственно LinearLayout - это ViewGroup, которая позволяет размещать в себе элементы, а LinearLayout.LayoutParams - правила, по которым они будут размещены.

ViewGroup.LayoutParams - это базовый класс, для остальных LayoutParams.

Программный способ не то, что бы лучше. Он просто позволяет сделать более гибкие вещи во время выполнения программы. А если экран статичен, то гораздо проще использовать layout-файлы.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

patalaka
Сообщения: 15
Зарегистрирован: 26 мар 2012, 19:38

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение patalaka » 27 мар 2012, 14:33

спасибо :) теперь все более понятно

i00lii
Сообщения: 2
Зарегистрирован: 14 май 2012, 23:41

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение i00lii » 14 май 2012, 23:56

Доброго времени суток. Не подскажете, в чем проблема? Очень хочу, что-бы TextView message добавилось в my_list по нажатию кнопки save.

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> 
.java файл

Код: Выделить всё

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);
        
    }
}
Ну никак не хочет добавляться message в my_list :(

Заранее, спасибо.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 15 май 2012, 10:34

i00lii писал(а):Очень хочу, что-бы TextView message добавилось в my_list по нажатию кнопки save. Ну никак не хочет добавляться message в my_list :(
Обратите внимание на объект message. Вы его нигде не создаете, но пытаетесь присвоить ему текст и добавить на экран. Приложение валится.

Надо создавать объект:

Код: Выделить всё

message = new TextView(My_first_app_Activity.this);
в save_click перед setText, setLayoutParams и пр.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

i00lii
Сообщения: 2
Зарегистрирован: 14 май 2012, 23:41

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение i00lii » 15 май 2012, 19:48

Спасибо за помощь. Просто я думал, что объявив поле в начале, уладил все формальности. :)

DenBond7
Сообщения: 5
Зарегистрирован: 20 май 2012, 15:33

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение DenBond7 » 20 май 2012, 15:35

Здраствуйте...интересный вопрос - если сменить ориентацию, то динамические обекты исчезают...как сохранить новосозданую иерархию Views

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение KamiSempai » 20 май 2012, 19:45

При повороте экрана Activity уничтожается и пересоздается заного, все элементы, созданные во время ее работы, пропадут. Отменить пересоздание можно в файле манифеста, в свойствах активности: android:configChanges="orientation"
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 21 май 2012, 11:34

DenBond7 писал(а):Здраствуйте...интересный вопрос - если сменить ориентацию, то динамические обекты исчезают...как сохранить новосозданую иерархию Views
Урок 70 рассказывает, как быть при повороте. Иерархию Views (если она отлична от layout-файла) я думаю придется заново создавать после поворота.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Flactor
Сообщения: 5
Зарегистрирован: 28 май 2012, 16:22

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение Flactor » 04 июн 2012, 22:13

Очепятка. Походу я первый внимательно прочитал :lol:
Рассмотрим подробно экран.

rgGravity – это RadoiGroup

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 17. Создание View-компонент в рабочем приложении

Сообщение damager82 » 06 июн 2012, 09:15

Flactor писал(а):Очепятка. Походу я первый внимательно прочитал :lol:
Пасибо, пофиксил )
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Ответить