Страница 1 из 14

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

Добавлено: 18 авг 2011, 03:00
damager82
В этом уроке мы:

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

Click here to read this article!

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

Добавлено: 31 янв 2012, 18:21
btx
Совет: простой способ добавить 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

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

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

___________________________________________

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

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

Добавлено: 27 фев 2012, 15:16
vano
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 нельзя!)

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

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

Удалите и снова добавьте кнопку в layout и сохраните все.

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

Добавлено: 28 фев 2012, 12:31
SoLVeX

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

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

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

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

Добавлено: 29 фев 2012, 14:14
vano
можете пожалуйста показать конечный код main, r.java. прсто понять не могу и ошибку так быстрее найду)заранее спасибо!

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

Добавлено: 01 мар 2012, 11:30
damager82
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;
    }
}

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

Добавлено: 14 май 2012, 23:34
fend
Возможно ли также, как в уроке, обработать 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();
		}
	}
}

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

Добавлено: 15 май 2012, 10:37
damager82
fend писал(а):Возможно ли также, как в уроке, обработать spinner?
А урок 56 уже смотрели?

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

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

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

Добавлено: 17 май 2012, 12:19
damager82
Чет я невнимательно посмотрел первый раз.

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

Здесь v - это один из пунктов списка spinner. А сам spinner - это parent.

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

Добавлено: 17 май 2012, 19:54
fend
там два подобных, upperlight и bottomlight.
просто выкинул абсолютно идентичный код для краткости.

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

Добавлено: 18 май 2012, 08:56
damager82
fend писал(а):там два подобных, upperlight и bottomlight.
просто выкинул абсолютно идентичный код для краткости.
Вам надо проверять не v, а parent.

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

Добавлено: 18 май 2012, 09:02
fend
ясно. а можно подробнее или ссылку на объяснение?

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

Добавлено: 21 май 2012, 11:20
damager82
fend писал(а):ясно. а можно подробнее или ссылку на объяснение?
В коде вместо v.getId()==R.id.upperlight, напишите parent.getId()==R.id.upperlight

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

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

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

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

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

Добавлено: 26 июл 2012, 13:42
HellAvalor
Доброго времени суток.
Столкнулся с идиотской проблемой, но не могу понять почему может не добавлять элемент 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());

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

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