Урок 8. Работаем с элементами экрана из кода

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

Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 18 авг 2011, 03:00

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

- научимся обращаться из кода к View-элементам на экране и менять их свойства

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

Аватара пользователя
btx
Сообщения: 4
Зарегистрирован: 31 янв 2012, 18:00

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение btx » 31 янв 2012, 18:21

Совет: простой способ добавить import в проект, это воспользоваться сочетанием клавиш Ctrl+Shift+O, недостающие пакеты будут автоматически определены и вставлены.
Tip: An easy way to add import packages to your project is to press Ctrl-Shift-O (Cmd-Shift-O, on Mac). This is an Eclipse shortcut that identifies missing packages based on your code and adds them for you. You may have to expand the import statements in your code for this to work.
http://developer.android.com/resources/ ... ld.html#ui

GaHHuKoB
Сообщения: 7
Зарегистрирован: 25 фев 2012, 01:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение GaHHuKoB » 25 фев 2012, 01:10

Здравствуйте, возникла такая проблемка - отсутствует R.id, при попытке записать константы в другие классы - ничего не происходит. Так же пробовал в ручную создать пункт id - все равно в него ничего не записывается, в чем проблема? Тварю на платформе 2.1, может это как-то сказывается?

___________________________________________

Кажется с проблемой разобрался - было создано 3 проекта, а ID составлялся для всех в 1 проекте, нужно было сменить адрес так сказать. С кодом еще не связывал компоненты, т.е. могу еще дописать это сообщение)

vano
Сообщения: 2
Зарегистрирован: 27 фев 2012, 14:52

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение vano » 27 фев 2012, 15:16

package ru.startandroid.develop.viewbyid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;

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

TextView myTextView = (TextView) findViewById(R.id.myText);
myTextView.setText("New text in TextView");

Button myBtn = (Button) findViewById(R.id.myBtn);
myBtn.setText("My button");
myBtn.setEnabled(false);

CheckBox myChb = (CheckBox) findViewById(R.id.myBtn);
myChb.setChecked(true);
}
}
что не правильно в этом коде? у меня в эклипсе подчёркивает "myBtn" не понять почему всё правельно делал!и исправить imortom нельзя!)

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

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 27 фев 2012, 15:23

vano писал(а):что не правильно в этом коде? у меня в эклипсе подчёркивает "myBtn" не понять почему всё правельно делал!и исправить imortom нельзя!)
layout-файл точно сохранен?

Удалите и снова добавьте кнопку в layout и сохраните все.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

SoLVeX
Сообщения: 15
Зарегистрирован: 21 фев 2012, 19:11
Контактная информация:

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение SoLVeX » 28 фев 2012, 12:31

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

Button myBtn = (Button) findViewById(R.id.myBtn);
CheckBox myChb = (CheckBox) findViewById(R.id.myBtn);
Попробуйте сменить id элементов.
и какой конкретно myBtn подчеркивает эклипс?
в коде их 5

PS попробуйте поискать во вкладке Problems
там обычно и ошибки и предупреждения

vano
Сообщения: 2
Зарегистрирован: 27 фев 2012, 14:52

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение vano » 29 фев 2012, 14:14

можете пожалуйста показать конечный код main, r.java. прсто понять не могу и ошибку так быстрее найду)заранее спасибо!

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

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 01 мар 2012, 11:30

main.xml

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

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

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" 
        android:id="@+id/myText"
        />

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

    <CheckBox
        android:id="@+id/myChb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CheckBox" />

</LinearLayout>
R.java:

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

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package ru.startandroid.develop.viewbyid;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class id {
        public static final int myBtn=0x7f050001;
        public static final int myChb=0x7f050002;
        public static final int myText=0x7f050000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Также обработать spinner.

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

Возможно ли также, как в уроке, обработать spinner?
Пытаюсь сделать по аналогии, не работает toast (видимо, не вызывается обработчик).
Хотя код обработчика кнопки (рядом находящегося) вызывается, toast работает.

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

public class MainActivity extends Activity implements OnClickListener, OnItemSelectedListener {
        Button buttonVideo;
	Spinner spinnerUpperLight, spinnerBottomLight;
       @Override
		public void onCreate(Bundle savedInstanceState) {
		    Spinner spinnerUpperLight = (Spinner) findViewById(R.id.upperlight);
		    spinnerUpperLight.setAdapter(adapterLight);
		    spinnerUpperLight.setOnItemSelectedListener(this);

         	    buttonVideo = (Button) findViewById(R.id.videoButton);    
	            buttonVideo.setOnClickListener(this);
		}
	}
...
	public void onClick(View v) {
		if (v.getId()==R.id.videoButton) {
			if (buttonVideo.getText()==getString(R.string.videoButtonRecord)) {
				buttonVideo.setText(R.string.videoButtonStop);
				Toast.makeText(getBaseContext(), "Запись Видео", Toast.LENGTH_SHORT).show();
			} 
		}
	}
        public void onItemSelected(AdapterView<?> parent, View v, int lightLevel, long id) {
		if (v.getId()==R.id.upperlight) {
			light.setUpperLight(lightLevel);
			Toast.makeText(getBaseContext(), "Верхняя подсветка: " + lightLevel, Toast.LENGTH_SHORT).show();
		}
	}
}

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

Re: Также обработать spinner.

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

fend писал(а):Возможно ли также, как в уроке, обработать spinner?
А урок 56 уже смотрели?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение fend » 16 май 2012, 10:19

Да, по нему и делал.
Возможно ли, что дело в отсутствии @Override перед OnItemSelected?
Ппросто когда изначально OnItemSelected был в OnCreate, то пришлось убрать @Override - эклипс ругался, и без этой директивы заработало.

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

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 17 май 2012, 12:19

Чет я невнимательно посмотрел первый раз.

А зачем вы это условие проверяете?
v.getId()==R.id.upperlight

Здесь v - это один из пунктов списка spinner. А сам spinner - это parent.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение fend » 17 май 2012, 19:54

там два подобных, upperlight и bottomlight.
просто выкинул абсолютно идентичный код для краткости.

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

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 18 май 2012, 08:56

fend писал(а):там два подобных, upperlight и bottomlight.
просто выкинул абсолютно идентичный код для краткости.
Вам надо проверять не v, а parent.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение fend » 18 май 2012, 09:02

ясно. а можно подробнее или ссылку на объяснение?

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

Re: Урок 8. Работаем с элементами экрана из кода

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

fend писал(а):ясно. а можно подробнее или ссылку на объяснение?
В коде вместо v.getId()==R.id.upperlight, напишите parent.getId()==R.id.upperlight
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

fend
Сообщения: 7
Зарегистрирован: 12 май 2012, 22:05

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение fend » 21 май 2012, 19:00

ага, заработало. спасибо большое.
теоретический вопрос - а почему при работе со спиннером в данном примере мы обращаемся не к view, а к адаптеру?

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

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение damager82 » 23 май 2012, 09:53

fend писал(а):теоретический вопрос - а почему при работе со спиннером в данном примере мы обращаемся не к view, а к адаптеру?
Адаптер мы используем только здесь: spinner.setAdapter(adapter);
А AdapterView - это View.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

HellAvalor
Сообщения: 8
Зарегистрирован: 26 июл 2012, 13:36

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение HellAvalor » 26 июл 2012, 13:42

Доброго времени суток.
Столкнулся с идиотской проблемой, но не могу понять почему может не добавлять элемент TextView. При этом то, что в хмл - отображается нормально, но программный элемент не добавляется. Где дырка?

Ниже ХМЛ и код

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

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@+id/RelativeCompany"
                 android:layout_width="fill_parent"
       		 android:layout_height="fill_parent">

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

          <TextView
              android:id="@+id/textView1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="TextView" />

          <TextView
              android:id="@+id/textView2"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="TextView" />

      </LinearLayout>
       
  </RelativeLayout>
  
java

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

package com.example.mobilewecanomy;

import android.os.Bundle;
import android.app.Activity;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class companies extends Activity {

	LinearLayout thisLayout;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    	setContentView(R.layout.companies);   	     
        
        thisLayout = (LinearLayout) findViewById(R.id.LinearCompany);
     
			TextView tv = new TextView(getApplicationContext());
			tv.setText("1111111");
		//	textView.setTextSize(100);
		//	textView.setTextColor(Color.BLACK);
		//	textView.setGravity(Gravity.CENTER);
		//	textView.setBackgroundColor(Color.BLUE);
			thisLayout.addView(tv);
    }
}
UPD получилось так, что отдельно данный код работает, но не работает в составе "флиппера" который листает экраны. Похоже надо колупаться там.

Варианты как можно прописать и тоже заработало

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

TextView tv = new TextView(this);
или

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

TextView tv = new TextView(thisLayout.getContext());

Jack_killer
Сообщения: 21
Зарегистрирован: 30 янв 2012, 21:15

Re: Урок 8. Работаем с элементами экрана из кода

Сообщение Jack_killer » 01 авг 2012, 22:26

Маленький вопрос:
В уроке вы сделали кнопку не активной, а есть ли у EditText какой нибудь метод, чтобы запретить редактирование(сделать не активным)?

Ответить