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

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

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

Сообщение n0tb0dy » 09 июн 2014, 16:06

Добрый день!

Столкнулся с одной проблемкой. Если пользователь устанавливает размер системного шрифта на большой или огромный, то естественно веся разметка лезет вкривь и вкось. Подскажите пожалуйста можно как то установить из кода приложения размер системного шрифта, чтобы он был нормальный NORMAL?

пробовал сделать так

[syntax=java]
Settings.System.putFloat(this.getContentResolver(),Settings.System.FONT_SCALE,(float) 1.0);
[/syntax]

не помогло

и так тоже пробовал

[syntax=java]
Configuration configuration = getResources().getConfiguration();
configuration.fontScale=(float) 1; //0.85 small size, 1 normal size, 1,15 big etc

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
[/syntax]

и тоже не помогло

разрешение в манифесте выставил такое

[syntax=xml]
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
[/syntax]

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

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

Сообщение KamiSempai » 09 июн 2014, 17:30

Если разметка едет, проблемы с разметкой. Разные размеры экранов тоже костылями править собираетесь?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

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

Сообщение n0tb0dy » 09 июн 2014, 21:46

собственно у многих приложений такая проблема
у того же самого вашего Traning Note та же самая проблема
если установить шрифт на очень большой то разметка съезжает

Изображение

Изображение

так что у вас та же самая проблема что и у меня :)

и так же у многих видно что размер шрифта не меняется, даже при смене системного

вопрос прежний как этого добиться
Вложения
Screenshot_2014-06-09-22-38-20.png
Screenshot_2014-06-09-22-38-20.png (168.2 КБ) 6418 просмотров
Screenshot_2014-06-09-22-35-05.png
Screenshot_2014-06-09-22-35-05.png (169.26 КБ) 6418 просмотров

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

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

Сообщение KamiSempai » 10 июн 2014, 09:39

Я его уже год не обновлял. Скоро выпускаю обновление, сделанное по всем канонам андроида.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

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

Сообщение n0tb0dy » 10 июн 2014, 10:05

вопрос то был не в этом :)

просто интересно как можно установить FONT_SCALE для своего приложения в нужное значение

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

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

Сообщение KamiSempai » 10 июн 2014, 10:20

Если брать мой случай, нужно сделать выравнивание текста по центру. Плюс ко всему, можно задать разные размеры для разных размеров экрана. Например, для маленьких экранов сделать заголовки чуть меньше чем для больших экранов. Делается это через разные values.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

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

Сообщение n0tb0dy » 10 июн 2014, 14:22

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

anpatu
Сообщения: 1
Зарегистрирован: 20 июн 2014, 13:18

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

Сообщение anpatu » 20 июн 2014, 13:49

Ребят, такая проблема: делал все в точности, как Виталий до момента, когда мы начали устанавливать значение текста в TextView из метода main. В классе id в файле R.java все добавилось, переменная myText есть. Вот смотрите, как я действую дальше: в файле MainActivity.java ввожу TextView myTextView=(TextView)findViewById (R.id.myText); (при этом добавив импорты), запускаю приложение, все работает, но он ругается, что переменная myTextView нигде не используется, это понятно. Вот дальше добавляю строку myTextView.setText("New text in text view");, запускаю приложение и вылетает. Пишет The application has stopped unexpectedly. Подскажите, что делать? Заранее спасибо :)

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

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

Сообщение Donart » 20 июн 2014, 18:12

Подскажите, что делать? Заранее спасибо
Нужно выкладывать код и логи.
Может Вы используете не тот layout файл?

ZumbiAzul
Сообщения: 2
Зарегистрирован: 22 июн 2014, 22:36

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

Сообщение ZumbiAzul » 22 июн 2014, 22:44

Ребят, такая проблема: делал все в точности, как Виталий до момента, когда мы начали устанавливать значение текста в TextView из метода main. В классе id в файле R.java все добавилось, переменная myText есть. Вот смотрите, как я действую дальше: в файле MainActivity.java ввожу TextView myTextView=(TextView)findViewById (R.id.myText); (при этом добавив импорты), запускаю приложение, все работает, но он ругается, что переменная myTextView нигде не используется, это понятно. Вот дальше добавляю строку myTextView.setText("New text in text view");, запускаю приложение и вылетает. Пишет The application has stopped unexpectedly. Подскажите, что делать? Заранее спасибо
У меня такая же проблема..
anpatu писал(а):Нужно выкладывать код и логи.
Вот мой код:

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

package ru.startandroid.develop.viewbyid;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		TextView myTextView = (TextView) findViewById(R.id.myText);
		try {
			myTextView.setText("HAHAHA");
		}
		catch(NullPointerException e) {
			Toast.makeText(this, "Oooops, something went wrong...", 1000).show();
		};

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}

}

При запуске приложения появляется указанный Toast: "Oooops, something went wrong..."

Я, конечно, подразумеваю, что это из-за обновления Google Eclipse ADT Bundle, в котором помимо activity_main.xml создается еще fragment_main.xml... И что наш TextView в действительности находится во втором из них, а не в первом, что и приводит к исключению NullPointerException... Но как переписать код так, чтобы текст все-таки программно изменился?


Нашел ответ...

Вот так надо переписать код:

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

package ru.startandroid.develop.viewbyid;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			
			TextView myTextView = (TextView) rootView.findViewById(R.id.myText);
			myTextView.setText("HAHAHA");
			
			return rootView;
		}
	}

}

т.е. строки

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

TextView myTextView = (TextView) rootView.findViewById(R.id.myText);
			myTextView.setText("HAHAHA");
добавить в метод onCreateView класса PlaceholderFragment, причем с добавлением rootView перед findViewById(R.id.myText)...

Теперь при запуске на экране "HAHAHA" :D

Dazz1e
Сообщения: 4
Зарегистрирован: 07 авг 2014, 14:22

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

Сообщение Dazz1e » 07 авг 2014, 14:34

Добрый день форумчане!
У меня имеется вопрос. Существует куча элементов экрана типа TextView c id vi1, vi2, vi3 и т.д.
Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво.

[syntax=java] vi1 = (TextView) findViewById(R.id.vi1);
vi2 = (TextView) findViewById(R.id.vi2);
vi3 = (TextView) findViewById(R.id.vi3);
vi4 = (TextView) findViewById(R.id.vi4);
vi5 = (TextView) findViewById(R.id.vi5);
vi6 = (TextView) findViewById(R.id.vi6);
vi7 = (TextView) findViewById(R.id.vi7);
vi8 = (TextView) findViewById(R.id.vi8);
vi9 = (TextView) findViewById(R.id.vi9);
vi10 = (TextView) findViewById(R.id.vi10);
vi11 = (TextView) findViewById(R.id.vi11);
vi12 = (TextView) findViewById(R.id.vi12);
vi13 = (TextView) findViewById(R.id.vi13);
vi14 = (TextView) findViewById(R.id.vi14);
vi15 = (TextView) findViewById(R.id.vi15);
vi16 = (TextView) findViewById(R.id.vi16);
vi17 = (TextView) findViewById(R.id.vi17);
vi18 = (TextView) findViewById(R.id.vi18);
vn1 = (TextView) findViewById(R.id.vn1);
vn2 = (TextView) findViewById(R.id.vn2);
vn3 = (TextView) findViewById(R.id.vn3);
vn4 = (TextView) findViewById(R.id.vn4);
vn5 = (TextView) findViewById(R.id.vn5);
vn6 = (TextView) findViewById(R.id.vn6);
vn7 = (TextView) findViewById(R.id.vn7);
vn8 = (TextView) findViewById(R.id.vn8);
vn9 = (TextView) findViewById(R.id.vn9);
vn10 = (TextView) findViewById(R.id.vn10);
vn11 = (TextView) findViewById(R.id.vn11);
vn12 = (TextView) findViewById(R.id.vn12);
vn13 = (TextView) findViewById(R.id.vn13);
vn14 = (TextView) findViewById(R.id.vn14);
vn15 = (TextView) findViewById(R.id.vn15);
vn16 = (TextView) findViewById(R.id.vn16);
vn17 = (TextView) findViewById(R.id.vn17);
vn18 = (TextView) findViewById(R.id.vn18);
vs1 = (TextView) findViewById(R.id.vs1);
vs2 = (TextView) findViewById(R.id.vs2);
vs3 = (TextView) findViewById(R.id.vs3);
vs4 = (TextView) findViewById(R.id.vs4);
vs5 = (TextView) findViewById(R.id.vs5);
vs6 = (TextView) findViewById(R.id.vs6);
vs7 = (TextView) findViewById(R.id.vs7);
vs8 = (TextView) findViewById(R.id.vs8);
vs9 = (TextView) findViewById(R.id.vs9);
vs10 = (TextView) findViewById(R.id.vs10);
vs11 = (TextView) findViewById(R.id.vs11);
vs12 = (TextView) findViewById(R.id.vs12);
vs13 = (TextView) findViewById(R.id.vs13);
vs14 = (TextView) findViewById(R.id.vs14);
vs15 = (TextView) findViewById(R.id.vs15);
vs16 = (TextView) findViewById(R.id.vs16);
vs17 = (TextView) findViewById(R.id.vs17);
vs18 = (TextView) findViewById(R.id.vs18);
va1 = (TextView) findViewById(R.id.va1);
va2 = (TextView) findViewById(R.id.va2);
va3 = (TextView) findViewById(R.id.va3);
va4 = (TextView) findViewById(R.id.va4);
va5 = (TextView) findViewById(R.id.va5);
va6 = (TextView) findViewById(R.id.va6);
va7 = (TextView) findViewById(R.id.va7);
va8 = (TextView) findViewById(R.id.va8);
va9 = (TextView) findViewById(R.id.va9);
va10 = (TextView) findViewById(R.id.va10);
va11 = (TextView) findViewById(R.id.va11);
va12 = (TextView) findViewById(R.id.va12);
va13 = (TextView) findViewById(R.id.va13);
va14 = (TextView) findViewById(R.id.va14);
va15 = (TextView) findViewById(R.id.va15);
va16 = (TextView) findViewById(R.id.va16);
va17 = (TextView) findViewById(R.id.va17);
va18 = (TextView) findViewById(R.id.va18);[/syntax]

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

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

Сообщение altwin » 07 авг 2014, 14:39

Dazz1e писал(а):Добрый день форумчане!
У меня имеется вопрос. Существует куча элементов экрана типа TextView c id vi1, vi2, vi3 и т.д.
Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво.

[syntax=java] vi1 = (TextView) findViewById(R.id.vi1);
vi2 = (TextView) findViewById(R.id.vi2);
vi3 = (TextView) findViewById(R.id.vi3);
vi4 = (TextView) findViewById(R.id.vi4);
vi5 = (TextView) findViewById(R.id.vi5);
vi6 = (TextView) findViewById(R.id.vi6);
vi7 = (TextView) findViewById(R.id.vi7);
vi8 = (TextView) findViewById(R.id.vi8);
vi9 = (TextView) findViewById(R.id.vi9);
vi10 = (TextView) findViewById(R.id.vi10);
vi11 = (TextView) findViewById(R.id.vi11);
vi12 = (TextView) findViewById(R.id.vi12);
vi13 = (TextView) findViewById(R.id.vi13);
vi14 = (TextView) findViewById(R.id.vi14);
vi15 = (TextView) findViewById(R.id.vi15);
vi16 = (TextView) findViewById(R.id.vi16);
vi17 = (TextView) findViewById(R.id.vi17);
vi18 = (TextView) findViewById(R.id.vi18);
vn1 = (TextView) findViewById(R.id.vn1);
vn2 = (TextView) findViewById(R.id.vn2);
vn3 = (TextView) findViewById(R.id.vn3);
vn4 = (TextView) findViewById(R.id.vn4);
vn5 = (TextView) findViewById(R.id.vn5);
vn6 = (TextView) findViewById(R.id.vn6);
vn7 = (TextView) findViewById(R.id.vn7);
vn8 = (TextView) findViewById(R.id.vn8);
vn9 = (TextView) findViewById(R.id.vn9);
vn10 = (TextView) findViewById(R.id.vn10);
vn11 = (TextView) findViewById(R.id.vn11);
vn12 = (TextView) findViewById(R.id.vn12);
vn13 = (TextView) findViewById(R.id.vn13);
vn14 = (TextView) findViewById(R.id.vn14);
vn15 = (TextView) findViewById(R.id.vn15);
vn16 = (TextView) findViewById(R.id.vn16);
vn17 = (TextView) findViewById(R.id.vn17);
vn18 = (TextView) findViewById(R.id.vn18);
vs1 = (TextView) findViewById(R.id.vs1);
vs2 = (TextView) findViewById(R.id.vs2);
vs3 = (TextView) findViewById(R.id.vs3);
vs4 = (TextView) findViewById(R.id.vs4);
vs5 = (TextView) findViewById(R.id.vs5);
vs6 = (TextView) findViewById(R.id.vs6);
vs7 = (TextView) findViewById(R.id.vs7);
vs8 = (TextView) findViewById(R.id.vs8);
vs9 = (TextView) findViewById(R.id.vs9);
vs10 = (TextView) findViewById(R.id.vs10);
vs11 = (TextView) findViewById(R.id.vs11);
vs12 = (TextView) findViewById(R.id.vs12);
vs13 = (TextView) findViewById(R.id.vs13);
vs14 = (TextView) findViewById(R.id.vs14);
vs15 = (TextView) findViewById(R.id.vs15);
vs16 = (TextView) findViewById(R.id.vs16);
vs17 = (TextView) findViewById(R.id.vs17);
vs18 = (TextView) findViewById(R.id.vs18);
va1 = (TextView) findViewById(R.id.va1);
va2 = (TextView) findViewById(R.id.va2);
va3 = (TextView) findViewById(R.id.va3);
va4 = (TextView) findViewById(R.id.va4);
va5 = (TextView) findViewById(R.id.va5);
va6 = (TextView) findViewById(R.id.va6);
va7 = (TextView) findViewById(R.id.va7);
va8 = (TextView) findViewById(R.id.va8);
va9 = (TextView) findViewById(R.id.va9);
va10 = (TextView) findViewById(R.id.va10);
va11 = (TextView) findViewById(R.id.va11);
va12 = (TextView) findViewById(R.id.va12);
va13 = (TextView) findViewById(R.id.va13);
va14 = (TextView) findViewById(R.id.va14);
va15 = (TextView) findViewById(R.id.va15);
va16 = (TextView) findViewById(R.id.va16);
va17 = (TextView) findViewById(R.id.va17);
va18 = (TextView) findViewById(R.id.va18);[/syntax]
http://kostin.ws/java/java-loops.html
Изображение

Dazz1e
Сообщения: 4
Зарегистрирован: 07 авг 2014, 14:22

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

Сообщение Dazz1e » 07 авг 2014, 14:51

altwin писал(а):
Dazz1e писал(а):Добрый день форумчане!
У меня имеется вопрос. Существует куча элементов экрана типа TextView c id vi1, vi2, vi3 и т.д.
Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво.

[syntax=java] vi1 = (TextView) findViewById(R.id.vi1);
vi2 = (TextView) findViewById(R.id.vi2);
vi3 = (TextView) findViewById(R.id.vi3);
vi4 = (TextView) findViewById(R.id.vi4);
vi5 = (TextView) findViewById(R.id.vi5);
vi6 = (TextView) findViewById(R.id.vi6);
vi7 = (TextView) findViewById(R.id.vi7);
vi8 = (TextView) findViewById(R.id.vi8);
vi9 = (TextView) findViewById(R.id.vi9);
vi10 = (TextView) findViewById(R.id.vi10);
vi11 = (TextView) findViewById(R.id.vi11);
vi12 = (TextView) findViewById(R.id.vi12);
vi13 = (TextView) findViewById(R.id.vi13);
vi14 = (TextView) findViewById(R.id.vi14);
vi15 = (TextView) findViewById(R.id.vi15);
vi16 = (TextView) findViewById(R.id.vi16);
vi17 = (TextView) findViewById(R.id.vi17);
vi18 = (TextView) findViewById(R.id.vi18);
vn1 = (TextView) findViewById(R.id.vn1);
vn2 = (TextView) findViewById(R.id.vn2);
vn3 = (TextView) findViewById(R.id.vn3);
vn4 = (TextView) findViewById(R.id.vn4);
vn5 = (TextView) findViewById(R.id.vn5);
vn6 = (TextView) findViewById(R.id.vn6);
vn7 = (TextView) findViewById(R.id.vn7);
vn8 = (TextView) findViewById(R.id.vn8);
vn9 = (TextView) findViewById(R.id.vn9);
vn10 = (TextView) findViewById(R.id.vn10);
vn11 = (TextView) findViewById(R.id.vn11);
vn12 = (TextView) findViewById(R.id.vn12);
vn13 = (TextView) findViewById(R.id.vn13);
vn14 = (TextView) findViewById(R.id.vn14);
vn15 = (TextView) findViewById(R.id.vn15);
vn16 = (TextView) findViewById(R.id.vn16);
vn17 = (TextView) findViewById(R.id.vn17);
vn18 = (TextView) findViewById(R.id.vn18);
vs1 = (TextView) findViewById(R.id.vs1);
vs2 = (TextView) findViewById(R.id.vs2);
vs3 = (TextView) findViewById(R.id.vs3);
vs4 = (TextView) findViewById(R.id.vs4);
vs5 = (TextView) findViewById(R.id.vs5);
vs6 = (TextView) findViewById(R.id.vs6);
vs7 = (TextView) findViewById(R.id.vs7);
vs8 = (TextView) findViewById(R.id.vs8);
vs9 = (TextView) findViewById(R.id.vs9);
vs10 = (TextView) findViewById(R.id.vs10);
vs11 = (TextView) findViewById(R.id.vs11);
vs12 = (TextView) findViewById(R.id.vs12);
vs13 = (TextView) findViewById(R.id.vs13);
vs14 = (TextView) findViewById(R.id.vs14);
vs15 = (TextView) findViewById(R.id.vs15);
vs16 = (TextView) findViewById(R.id.vs16);
vs17 = (TextView) findViewById(R.id.vs17);
vs18 = (TextView) findViewById(R.id.vs18);
va1 = (TextView) findViewById(R.id.va1);
va2 = (TextView) findViewById(R.id.va2);
va3 = (TextView) findViewById(R.id.va3);
va4 = (TextView) findViewById(R.id.va4);
va5 = (TextView) findViewById(R.id.va5);
va6 = (TextView) findViewById(R.id.va6);
va7 = (TextView) findViewById(R.id.va7);
va8 = (TextView) findViewById(R.id.va8);
va9 = (TextView) findViewById(R.id.va9);
va10 = (TextView) findViewById(R.id.va10);
va11 = (TextView) findViewById(R.id.va11);
va12 = (TextView) findViewById(R.id.va12);
va13 = (TextView) findViewById(R.id.va13);
va14 = (TextView) findViewById(R.id.va14);
va15 = (TextView) findViewById(R.id.va15);
va16 = (TextView) findViewById(R.id.va16);
va17 = (TextView) findViewById(R.id.va17);
va18 = (TextView) findViewById(R.id.va18);[/syntax]
http://kostin.ws/java/java-loops.html
Здравствуйте altwin,
Это конечно классно, но как это выполнить?! Конкатенетить?

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

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

Сообщение altwin » 07 авг 2014, 17:14

Dazz1e писал(а):
altwin писал(а):
Dazz1e писал(а):Добрый день форумчане!
У меня имеется вопрос. Существует куча элементов экрана типа TextView c id vi1, vi2, vi3 и т.д.
Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво.

[syntax=java] vi1 = (TextView) findViewById(R.id.vi1);
vi2 = (TextView) findViewById(R.id.vi2);
vi3 = (TextView) findViewById(R.id.vi3);
vi4 = (TextView) findViewById(R.id.vi4);
vi5 = (TextView) findViewById(R.id.vi5);
vi6 = (TextView) findViewById(R.id.vi6);
vi7 = (TextView) findViewById(R.id.vi7);
vi8 = (TextView) findViewById(R.id.vi8);
vi9 = (TextView) findViewById(R.id.vi9);
vi10 = (TextView) findViewById(R.id.vi10);
vi11 = (TextView) findViewById(R.id.vi11);
vi12 = (TextView) findViewById(R.id.vi12);
vi13 = (TextView) findViewById(R.id.vi13);
vi14 = (TextView) findViewById(R.id.vi14);
vi15 = (TextView) findViewById(R.id.vi15);
vi16 = (TextView) findViewById(R.id.vi16);
vi17 = (TextView) findViewById(R.id.vi17);
vi18 = (TextView) findViewById(R.id.vi18);
vn1 = (TextView) findViewById(R.id.vn1);
vn2 = (TextView) findViewById(R.id.vn2);
vn3 = (TextView) findViewById(R.id.vn3);
vn4 = (TextView) findViewById(R.id.vn4);
vn5 = (TextView) findViewById(R.id.vn5);
vn6 = (TextView) findViewById(R.id.vn6);
vn7 = (TextView) findViewById(R.id.vn7);
vn8 = (TextView) findViewById(R.id.vn8);
vn9 = (TextView) findViewById(R.id.vn9);
vn10 = (TextView) findViewById(R.id.vn10);
vn11 = (TextView) findViewById(R.id.vn11);
vn12 = (TextView) findViewById(R.id.vn12);
vn13 = (TextView) findViewById(R.id.vn13);
vn14 = (TextView) findViewById(R.id.vn14);
vn15 = (TextView) findViewById(R.id.vn15);
vn16 = (TextView) findViewById(R.id.vn16);
vn17 = (TextView) findViewById(R.id.vn17);
vn18 = (TextView) findViewById(R.id.vn18);
vs1 = (TextView) findViewById(R.id.vs1);
vs2 = (TextView) findViewById(R.id.vs2);
vs3 = (TextView) findViewById(R.id.vs3);
vs4 = (TextView) findViewById(R.id.vs4);
vs5 = (TextView) findViewById(R.id.vs5);
vs6 = (TextView) findViewById(R.id.vs6);
vs7 = (TextView) findViewById(R.id.vs7);
vs8 = (TextView) findViewById(R.id.vs8);
vs9 = (TextView) findViewById(R.id.vs9);
vs10 = (TextView) findViewById(R.id.vs10);
vs11 = (TextView) findViewById(R.id.vs11);
vs12 = (TextView) findViewById(R.id.vs12);
vs13 = (TextView) findViewById(R.id.vs13);
vs14 = (TextView) findViewById(R.id.vs14);
vs15 = (TextView) findViewById(R.id.vs15);
vs16 = (TextView) findViewById(R.id.vs16);
vs17 = (TextView) findViewById(R.id.vs17);
vs18 = (TextView) findViewById(R.id.vs18);
va1 = (TextView) findViewById(R.id.va1);
va2 = (TextView) findViewById(R.id.va2);
va3 = (TextView) findViewById(R.id.va3);
va4 = (TextView) findViewById(R.id.va4);
va5 = (TextView) findViewById(R.id.va5);
va6 = (TextView) findViewById(R.id.va6);
va7 = (TextView) findViewById(R.id.va7);
va8 = (TextView) findViewById(R.id.va8);
va9 = (TextView) findViewById(R.id.va9);
va10 = (TextView) findViewById(R.id.va10);
va11 = (TextView) findViewById(R.id.va11);
va12 = (TextView) findViewById(R.id.va12);
va13 = (TextView) findViewById(R.id.va13);
va14 = (TextView) findViewById(R.id.va14);
va15 = (TextView) findViewById(R.id.va15);
va16 = (TextView) findViewById(R.id.va16);
va17 = (TextView) findViewById(R.id.va17);
va18 = (TextView) findViewById(R.id.va18);[/syntax]
http://kostin.ws/java/java-loops.html
Здравствуйте altwin,
Это конечно классно, но как это выполнить?! Конкатенетить?
а что вас смущает ? Отвечая себе на этот вопрос вы всегда найдете решение, конкатенация строк, даст вам строку, а вам нужен id ресурса, для этого существует метод - getIdentifier
[syntax=java5]
Resources res = getResources(); //if you are in an activity
for (int i = 1; i < 13; i++) {
String idName = "imageView" + i;
buttons = (ImageView) findViewById(res.getIdentifier(idName, "id, getPackageName()));
}
[/syntax]
Изображение

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

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

Сообщение Foenix » 07 авг 2014, 23:50

можно вьюшки в массив положить и их перебирать почти так же

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

Context mContext = getActivity().getBaseContext() ;             

                 mRes = mContext.getResources();                 

                String[] idOfButtons={"btn0","btn1", "btn2", "btn3", "btn4"};   

                for (int position = 0; position < idOfButtons.length; position++) {                     

                           Integer btnId = mRes.getIdentifier(idOfButtons[position], "id", ( getActivity()).getBaseContext().getPackageName());                   

                           ImageButton btn = (ImageButton) v.findViewById(btnId);                         

                           btn.setOnClickListener(this.onClick);

                        }
R.id.team

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

Dazz1e
Сообщения: 4
Зарегистрирован: 07 авг 2014, 14:22

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

Сообщение Dazz1e » 08 авг 2014, 10:26

altwin писал(а):
Dazz1e писал(а):
altwin писал(а):
Dazz1e писал(а):Добрый день форумчане!
У меня имеется вопрос. Существует куча элементов экрана типа TextView c id vi1, vi2, vi3 и т.д.
Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво.

[syntax=java] vi1 = (TextView) findViewById(R.id.vi1);
vi2 = (TextView) findViewById(R.id.vi2);
vi3 = (TextView) findViewById(R.id.vi3);
vi4 = (TextView) findViewById(R.id.vi4);
vi5 = (TextView) findViewById(R.id.vi5);
vi6 = (TextView) findViewById(R.id.vi6);
vi7 = (TextView) findViewById(R.id.vi7);
vi8 = (TextView) findViewById(R.id.vi8);
vi9 = (TextView) findViewById(R.id.vi9);
vi10 = (TextView) findViewById(R.id.vi10);
vi11 = (TextView) findViewById(R.id.vi11);
vi12 = (TextView) findViewById(R.id.vi12);
vi13 = (TextView) findViewById(R.id.vi13);
vi14 = (TextView) findViewById(R.id.vi14);
vi15 = (TextView) findViewById(R.id.vi15);
vi16 = (TextView) findViewById(R.id.vi16);
vi17 = (TextView) findViewById(R.id.vi17);
vi18 = (TextView) findViewById(R.id.vi18);
vn1 = (TextView) findViewById(R.id.vn1);
vn2 = (TextView) findViewById(R.id.vn2);
vn3 = (TextView) findViewById(R.id.vn3);
vn4 = (TextView) findViewById(R.id.vn4);
vn5 = (TextView) findViewById(R.id.vn5);
vn6 = (TextView) findViewById(R.id.vn6);
vn7 = (TextView) findViewById(R.id.vn7);
vn8 = (TextView) findViewById(R.id.vn8);
vn9 = (TextView) findViewById(R.id.vn9);
vn10 = (TextView) findViewById(R.id.vn10);
vn11 = (TextView) findViewById(R.id.vn11);
vn12 = (TextView) findViewById(R.id.vn12);
vn13 = (TextView) findViewById(R.id.vn13);
vn14 = (TextView) findViewById(R.id.vn14);
vn15 = (TextView) findViewById(R.id.vn15);
vn16 = (TextView) findViewById(R.id.vn16);
vn17 = (TextView) findViewById(R.id.vn17);
vn18 = (TextView) findViewById(R.id.vn18);
vs1 = (TextView) findViewById(R.id.vs1);
vs2 = (TextView) findViewById(R.id.vs2);
vs3 = (TextView) findViewById(R.id.vs3);
vs4 = (TextView) findViewById(R.id.vs4);
vs5 = (TextView) findViewById(R.id.vs5);
vs6 = (TextView) findViewById(R.id.vs6);
vs7 = (TextView) findViewById(R.id.vs7);
vs8 = (TextView) findViewById(R.id.vs8);
vs9 = (TextView) findViewById(R.id.vs9);
vs10 = (TextView) findViewById(R.id.vs10);
vs11 = (TextView) findViewById(R.id.vs11);
vs12 = (TextView) findViewById(R.id.vs12);
vs13 = (TextView) findViewById(R.id.vs13);
vs14 = (TextView) findViewById(R.id.vs14);
vs15 = (TextView) findViewById(R.id.vs15);
vs16 = (TextView) findViewById(R.id.vs16);
vs17 = (TextView) findViewById(R.id.vs17);
vs18 = (TextView) findViewById(R.id.vs18);
va1 = (TextView) findViewById(R.id.va1);
va2 = (TextView) findViewById(R.id.va2);
va3 = (TextView) findViewById(R.id.va3);
va4 = (TextView) findViewById(R.id.va4);
va5 = (TextView) findViewById(R.id.va5);
va6 = (TextView) findViewById(R.id.va6);
va7 = (TextView) findViewById(R.id.va7);
va8 = (TextView) findViewById(R.id.va8);
va9 = (TextView) findViewById(R.id.va9);
va10 = (TextView) findViewById(R.id.va10);
va11 = (TextView) findViewById(R.id.va11);
va12 = (TextView) findViewById(R.id.va12);
va13 = (TextView) findViewById(R.id.va13);
va14 = (TextView) findViewById(R.id.va14);
va15 = (TextView) findViewById(R.id.va15);
va16 = (TextView) findViewById(R.id.va16);
va17 = (TextView) findViewById(R.id.va17);
va18 = (TextView) findViewById(R.id.va18);[/syntax]
http://kostin.ws/java/java-loops.html
Здравствуйте altwin,
Это конечно классно, но как это выполнить?! Конкатенетить?
а что вас смущает ? Отвечая себе на этот вопрос вы всегда найдете решение, конкатенация строк, даст вам строку, а вам нужен id ресурса, для этого существует метод - getIdentifier
[syntax=java5]
Resources res = getResources(); //if you are in an activity
for (int i = 1; i < 13; i++) {
String idName = "imageView" + i;
buttons = (ImageView) findViewById(res.getIdentifier(idName, "id, getPackageName()));
}
[/syntax]

У меня вопрос, как вы инициализировали buttons[]?

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

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

Сообщение KamiSempai » 08 авг 2014, 14:43

Dazz1e писал(а):...Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво...
По мне, так тут изначально выбрано не "красивое" решение. Даже если вы сможете записать ссылки на все TextView в массив, дальнейшее их использование будет настоящим мучением.
Что вы вообще хотели получить в итоге?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Dazz1e
Сообщения: 4
Зарегистрирован: 07 авг 2014, 14:22

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

Сообщение Dazz1e » 08 авг 2014, 16:21

KamiSempai писал(а):
Dazz1e писал(а):...Можно ли это как то компактнее выполнить?
Ибо выходит не очень красиво...
По мне, так тут изначально выбрано не "красивое" решение. Даже если вы сможете записать ссылки на все TextView в массив, дальнейшее их использование будет настоящим мучением.
Что вы вообще хотели получить в итоге?
В лэйблы, вводятся данные из БД. И вводить их можно будет циклом do while. Решение вывода данных, с использованием массива и цикла я знаю, но использование массива и цикла для присвоения значений не выходит, т.к. я не знаком в совершенстве с Java да и со всем программированием в том числе. Да и циклы с массивами недолюбливаю.

Аватара пользователя
Тихон Котов
Сообщения: 15
Зарегистрирован: 21 авг 2014, 13:13

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

Сообщение Тихон Котов » 22 авг 2014, 12:04

Из текста урока № 8: "Давайте откроем main.xml, для TextView укажем ID = @+id/myText и сохраним"
может быть, поправить выделенное - закавычить?? Тем более, ниже на скриншоте - именно так?

Аватара пользователя
Тихон Котов
Сообщения: 15
Зарегистрирован: 21 авг 2014, 13:13

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

Сообщение Тихон Котов » 22 авг 2014, 14:07

Не удается построить приложение из восьмого урока... Создавал его заново уже много раз ... все что-то не так!
Примерно в половине случаев во вновь созданном приложении вдруг отрастает ошибка - "AndroidManifest.xml file missing!", хотя этот файл присутствует и прекрасно выглядит...
Как это понять и как лечить ?
И, если не сложно, - добавьте в конце урока текст приложение P0081_ViewBuild целиком для копирования и вставки в новый проект...
Спасибо.

Ответить