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

Обсуждение уроков
Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 10 фев 2014, 06:11

Fynjy писал(а):Доброго вечера, девелоперы! Выполнив урок, решил немного его дополнить)) Ведь когда нажимаешь кнопку "очистить экран", то текст в поле "editText" не исчезает, а мне кажется, что это неправильно. И поэтому я сделал небольшую приписочку

case R.id.btnClear:
llMain.removeAllViews();
Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
etName.setText("");
break;
в этом сообщении нет вопроса, да? Минуты три потребовалось чтобы это понять)

Fynjy
Сообщения: 2
Зарегистрирован: 09 фев 2014, 22:30

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

Сообщение Fynjy » 11 фев 2014, 15:38

klblk писал(а):
Fynjy писал(а):Доброго вечера, девелоперы! Выполнив урок, решил немного его дополнить)) Ведь когда нажимаешь кнопку "очистить экран", то текст в поле "editText" не исчезает, а мне кажется, что это неправильно. И поэтому я сделал небольшую приписочку

case R.id.btnClear:
llMain.removeAllViews();
Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
etName.setText("");
break;
в этом сообщении нет вопроса, да? Минуты три потребовалось чтобы это понять)
Вопрос не подразумевался, я сделал крохотное дополнение к программе)

Pudans
Сообщения: 2
Зарегистрирован: 21 мар 2014, 15:32

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

Сообщение Pudans » 21 мар 2014, 15:38

Всем привет! Второй день уже лопачу интернет.
Есть программно заданная Радиогруппа и массив Радиокнопок к нему. Как мне в этом случае задать setOnCheckedChangeListener? (с примером)
Заранее спасибо!

wwswws
Сообщения: 4
Зарегистрирован: 26 мар 2014, 13:55

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

Сообщение wwswws » 26 мар 2014, 18:23

Здравствуйте.
Хочу программным способом построить такое окно.(фото)
Как я понял нужно создать такую же структуру как и в main.xml.
LinearLayout
TextView
LinearLayout1
Button1
Button2
LinearLayout2
Button3
Button4
не получается создать LinearLayout1, LinearLayout2.
Прошу подсказать или маленький примерчик.
Заранее спасибо.
Вложения
Экран с кнопками.JPG
Экран с кнопками.JPG (75.56 КБ) 9268 просмотров

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 май 2014, 17:41

Добрый день!

Подскажите пожалуйста, как определить порядок перехода по полям editText по кнопке далее?

AKhorevich
Сообщения: 6
Зарегистрирован: 24 май 2014, 21:01

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

Сообщение AKhorevich » 30 май 2014, 07:03

damager82 писал(а): В конце урока добавил немного инфы про доступ к созданным компонентам.
Спасибо. А если циклом создается 4 кнопки?)) то тогда как?

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


    for (int k = 0; k < 4; k++) { 
                Button btnNew = new Button(this); 
                btnNew.setText(name.get(k)); 
                btnNew.setTextSize(16); 
                btnNew.setId(k); 
                lay1.addView(btnNew); 
     
     
            } 


sensay
Сообщения: 1
Зарегистрирован: 02 июл 2014, 13:53

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

Сообщение sensay » 02 июл 2014, 13:59

часть кода
case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
излишняя, так как уже задана переменная выше int btnGravity = Gravity.LEFT; выше цикла. Т.е. часть кода не влияет на алгоритм работы.
ЗЫ: спасибо за уроки!

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 02 июл 2014, 14:43

sensay писал(а):часть кода
case R.id.rbLeft:
btnGravity = Gravity.LEFT;
break;
излишняя, так как уже задана переменная выше int btnGravity = Gravity.LEFT; выше цикла. Т.е. часть кода не влияет на алгоритм работы.
ЗЫ: спасибо за уроки!
код действительно не очень корректен ( хотя в контексте урока он отлично выполняет свою задачу и значения это не особо имеет ), но:
1. переменная int btnGravity = Gravity.LEFT, должна объявляться с значением null, что повышает тестируемость, т.е. assert( btnGravity == null ) ? кнопка нажата : кнопка НЕ нажата
2. обязательно нужно указывать case R.id.rbLeft, чтобы не нарушать принцип целостности и не убивать читаемость кода
3. каждый switch обязательно должен содержать секцию default


P.S. но все это мало отношения к уроку имеет.
Изображение

Аватара пользователя
Don77
Сообщения: 13
Зарегистрирован: 02 июл 2014, 00:21

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

Сообщение Don77 » 08 июл 2014, 22:48

код действительно не очень корректен ( хотя в контексте урока он отлично выполняет свою задачу и значения это не особо имеет ), но:
1. переменная int btnGravity = Gravity.LEFT, должна объявляться с значением null, что повышает тестируемость, т.е. assert( btnGravity == null ) ? кнопка нажата : кнопка НЕ нажата
2. обязательно нужно указывать case R.id.rbLeft, чтобы не нарушать принцип целостности и не убивать читаемость кода
3. каждый switch обязательно должен содержать секцию default


P.S. но все это мало отношения к уроку имеет.
Присваивать примитиву - null??Очень интересно. :)
Гораздо правильнее, объявить переменную gravity в блоке свич, соответственно в том-же самом блоке присвоить ее переменной gravity класса LayoutParams.К тому-же все = по дефолту новый View установится в левый угол.
Я бы вообще отказался от свичей, порой сложно разглядеть код, иф-ы гораздо более изящнее выглядят, хотя это уже дело вкуса.

betirsolt
Сообщения: 38
Зарегистрирован: 03 июл 2014, 23:45

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

Сообщение betirsolt » 19 июл 2014, 04:16

у меня кнопка btnCreat не работает, кнопки не создаются, прога компилится и запускается без ошибок, и отображается все как надо, но при нажатии на кнопку Creat ничего не происходит, а вот Clear вроде работает, Toast выводит, думал у меня где то ошибка в коде так как я сам все набираю, скопировал с сайта весь код проекта и все равно тоже самое, в чем может быть проблема?

betirsolt
Сообщения: 38
Зарегистрирован: 03 июл 2014, 23:45

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

Сообщение betirsolt » 19 июл 2014, 18:12

Помогите пожалуйста разобраться, ребята не молчите

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

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

Сообщение Mikhail_dev » 19 июл 2014, 18:27

Как же угнетает, когда из нас делают экстрасенсов. Но поверьте, это не так, далеко не так! По фразам "у меня все не работает, скопировал проект, который у всех работает, а у меня не запускается. В чем может быть проблема?" мы нифига не понимаем, что у Вас там не работает. Это не код, это просто крик Вашей души.

betirsolt
Сообщения: 38
Зарегистрирован: 03 июл 2014, 23:45

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

Сообщение betirsolt » 19 июл 2014, 18:42

Mikhail_dev писал(а):Как же угнетает, когда из нас делают экстрасенсов. Но поверьте, это не так, далеко не так! По фразам "у меня все не работает, скопировал проект, который у всех работает, а у меня не запускается. В чем может быть проблема?" мы нифига не понимаем, что у Вас там не работает. Это не код, это просто крик Вашей души.
вот код из MainActivity

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

package com.example.p0171_dynamiclayout2;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	  LinearLayout llMain;
	  RadioGroup rgGravity;
	  EditText etName;
	  Button btnCreate;
	  Button btnClear;

	  int wrapContent = LinearLayout.LayoutParams.WRAP_CONTENT;

	  /** Called when the activity is first created. */
	  @Override
	  public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.main);

	    llMain = (LinearLayout) findViewById(R.id.llMain);
	    rgGravity = (RadioGroup) findViewById(R.id.rgGravity);
	    etName = (EditText) findViewById(R.id.etName);

	    btnCreate = (Button) findViewById(R.id.btnCreate);
	    btnCreate.setOnClickListener(this);

	    btnClear = (Button) findViewById(R.id.btnClear);
	    btnClear.setOnClickListener(this);
	  }

	  @Override
	  public void onClick(View v) {
	    switch (v.getId()) {
	    case R.id.btnCreate:
	      // Создание LayoutParams c шириной и высотой по содержимому
	      LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
	          wrapContent, wrapContent);
	      // переменная для хранения значения выравнивания
	      // по умолчанию пусть будет LEFT
	      int btnGravity = Gravity.LEFT;
	      // определяем, какой RadioButton "чекнут" и
	      // соответственно заполняем btnGravity
	      switch (rgGravity.getCheckedRadioButtonId()) {
	      case R.id.rbLeft:
	        btnGravity = Gravity.LEFT;
	        break;
	      case R.id.rbCenter:
	        btnGravity = Gravity.CENTER_HORIZONTAL;
	        break;
	      case R.id.rbRight:
	        btnGravity = Gravity.RIGHT;
	        break;
	      }
	      // переносим полученное значение выравнивания в LayoutParams
	      lParams.gravity = btnGravity;

	      // создаем Button, пишем текст и добавляем в LinearLayout
	      Button btnNew = new Button(this);
	      btnNew.setText(etName.getText().toString());
	      llMain.addView(btnNew, lParams);

	      break;

	    case R.id.btnClear:
	      llMain.removeAllViews();
	      Toast.makeText(this, "Удалено", Toast.LENGTH_SHORT).show();
	      break;

	    }
	  }

	}
вот код из layout файла main.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
    <RadioGroup 
        android:id="@+id/rgGravity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        
        <RadioButton 
            android:id="@+id/rbLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="Left"/>
        
          <RadioButton 
            android:id="@+id/rbCenter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Center"/>
        
         <RadioButton 
            android:id="@+id/rbRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Right"/>
       </RadioGroup>
       
    <LinearLayout
         android:id="@+id/linearLayout1"
         android:layout_width="match_parent"
    	 android:layout_height="match_parent"
   	     android:orientation="horizontal"  >
        
        <EditText 
            android:id="@+id/etName"
            android:layout_width="wrap_content"
    	    android:layout_height="wrap_content"
    	    android:layout_weight="1"
    	    android:fadeScrollbars="true"/>
        
        
        <Button 
            android:id="@+id/btnCreate"
            android:layout_width="wrap_content"
    	    android:layout_height="wrap_content"
    	    android:text="Create" />
        
        <Button 
            android:id="@+id/btnClear"
            android:layout_width="wrap_content"
    	    android:layout_height="wrap_content"
    	    android:text="Clear" />
        
    </LinearLayout>
    
    <LinearLayout
         android:id="@+id/llMain"
         android:layout_width="match_parent"
    	 android:layout_height="match_parent"
   	     android:orientation="vertical"  >
        
    </LinearLayout>


</LinearLayout>
а теперь сможете помочь?

Donart
Сообщения: 114
Зарегистрирован: 06 ноя 2013, 08:59

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

Сообщение Donart » 19 июл 2014, 20:27

а теперь сможете помочь?
Второй LinearLayout, в котором ЕдитТекст и Баттон, свойство android:layout_height="match_parent" исправьте на android:layout_height="wrap_content". Вы задаете высоту лэйаута заполнить родителя(оставшееся место на экране), из-за этого для третьего лейаута, который ниже и в котором создаются кнопки попросту нет места.

betirsolt
Сообщения: 38
Зарегистрирован: 03 июл 2014, 23:45

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

Сообщение betirsolt » 19 июл 2014, 20:44

Donart писал(а):
а теперь сможете помочь?
Второй LinearLayout, в котором ЕдитТекст и Баттон, свойство android:layout_height="match_parent" исправьте на android:layout_height="wrap_content". Вы задаете высоту лэйаута заполнить родителя(оставшееся место на экране), из-за этого для третьего лейаута, который ниже и в котором создаются кнопки попросту нет места.
Огромное Вам спасибо

RomIII
Сообщения: 2
Зарегистрирован: 05 ноя 2013, 20:23

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

Сообщение RomIII » 11 сен 2014, 13:15

Объясните почему тип переменной выбран int ? Gravity.LEFT = равно числу?

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

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

Сообщение KamiSempai » 11 сен 2014, 15:24

RomIII писал(а):Объясните почему тип переменной выбран int ? Gravity.LEFT = равно числу?
Да, Gravity.LEFT - это целочисленная константа.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
xamak
Сообщения: 15
Зарегистрирован: 14 апр 2014, 03:05

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

Сообщение xamak » 27 дек 2014, 14:11

Пытаюсь кнопке прописать ID.
Ошибка - button1.setId(btn1);
Получилось только присвоить, а для этого заранее создаю в ресурсах ID <item name="btn1" type="id"/>, тогда button1.setId(btn1); - все хорошо.
Можно ли прописать кнопке ID без присваивания ID из ресурса?
Также интересно почему нет ошибки и что означает, если прописать, например, button1.setId(100+1);

И как быть, если кнопки создаются программно, больше одной?
Пытался через цикл for (int i = 1; i < 5; i++) {textNew.setId(i);} - Ошибка.

Спасибо!

Аватара пользователя
pepsi
Сообщения: 3
Зарегистрирован: 19 янв 2015, 13:41

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

Сообщение pepsi » 19 янв 2015, 13:58

Подскажите пожалуйста.

Как обращаться к динамически созданным кнопкам? Как определить уникальный слушатель нажатия на каждую их них?

Кнопки создались, но как же с ними работать?

создаю по такому коду:

[syntax=java]for (int i = 0; i < 3; i++) {
Button button = new Button(this);
layout.addView(button);
button.setText(textButton);
button.setGravity(Gravity.LEFT);
button.setId(i);
Integer iii = button.getId();
button.findViewById(iii);
ii = String.valueOf(i+1);

View.OnClickListener onClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Нажата кнопка: ", ii);
}
};
button.setOnClickListener(onClick);
}[/syntax]

в итоге при нажатии на каждую в логах пишется "Нажата кнопка: 3". А мне необходимо на каждую кнопку свое значение.

Спасибо!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 19 янв 2015, 13:59

три кнопочки и создаете динамически?
поищите по форуму, это уже не раз обсуждалось.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить