Как автоматически присвоить компоненту TextView значение

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 03 апр 2012, 18:19

Здравствуйте!

Прошу помочь со следующим вопросом. Мне нужно чтобы в цикле TextViewNew был с разным названием. Т.е. к названию TextViewNew нужно прибавлять i. Я пытался сделать TextViewNew+i, но мне выдается ошибка.

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

String[] names = { "ФРАНЦИЯ", "ИТАЛИЯ" };
for(int i=0;i<names.length;i++)
{
 TextView TextViewNew+i = new TextView(getApplicationContext());
 TextViewNew+i.setTextSize(TypedValue.COMPLEX_UNIT_DIP,22);
 TextViewNew+i.setTextColor(Color.parseColor("#882a2d"));
 TextViewNew+i.setId(i);
 TextViewNew+i.setText(names[i]);
}

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как автоматически присвоить компоненту TextView значение

Сообщение andev » 03 апр 2012, 18:30

Вы не можете обращаться к TextView, которых нет. Я так понимаю вы хотите вывести содержимое своего массива
String[] names = { "ФРАНЦИЯ", "ИТАЛИЯ" };
в список, что бы элементами этого списка были TextView.
В таком случае вы можете прочесть соответствующий урок про списки
http://startandroid.ru/uroki/vse-uroki- ... tview.html

Если вам необходимо просто отобразить информацию в столбик, без необходимости дальнейшего взаимодействия с ней (только показываться будет), то вам будет достаточно одного TextView.

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

	        TextView myTextView = null; // здесь вместо null берете с разметки свой единственный TextView
	        
	        String[] names = { "ФРАНЦИЯ", "ИТАЛИЯ" };
	        StringBuilder sb = new StringBuilder();
	        for(int i = 0; i < names.length; i++)
	        {
	        	sb.append(names[i]); // заносим очередную страну из массива names 
	        	if (i != names.length - 1) { // если у нас есть еще элементы в массиве то
	        		sb.append("\r\n"); // переходим на новую строку
	        						   // \r\n - escape последовательности, погуглите
	        	}
	        } // цикл закончен, в sb содержится текст "ФРАНЦИЯ\r\nИТАЛИЯ"
	        
	        myTextView.setText(sb.toString()); // тут понятно

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 03 апр 2012, 18:34

Взаимодействие будет. Каждому созданному TextView будет установлен setOnClickListener, чтобы при нажатии можно было выполнять действия по выводу следующей информации. Скажем при нажатии на ФРАНЦИЯ, будет ниже слова ФРАНЦИЯ, выводиться Париж, а при нажатии на Италия, после слова Италия, будет выводиться Рим.

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 03 апр 2012, 18:37

Я делаю первое приложение. И сейчас я не могу отдавать себе отчет, что делаю правильно. Мне нужно сделать меню в приложении следующего рода.

Есть меню:
1. Ноутбук
2. Нетбук
3. Планшетный компьютер

При нажатии на "1. Ноубук", я должен получить подпункты этого меню в таком виде:
1. Ноутбук
1.1. Диагональ 15 дюймов
1.2. Диагональ 17 дюймов
2. Нетбук
3. Планшетный компьютер

При нажатии на "1.1. Диагональ 15 дюймов", я должен получить подпункты этого меню в таком виде:
1. Ноутбук
1.1. Диагональ 15 дюймов
1.1.1. Samsung
1.1.2. Sony
1.1.3. Acer
1.2. Диагональ 17 дюймов
2. Нетбук
3. Планшетный компьютер

При нажатии на "1.1.1. Samsung", открывается список всех моделей Samsung с диагональю 15 дюймов.

Пример реализации этого меню это первое сообщение данной темы.
Если вы видите как это сделать более правильней, прошу помочь.

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 03 апр 2012, 18:40

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

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как автоматически присвоить компоненту TextView значение

Сообщение andev » 03 апр 2012, 18:47

Непростую вы задачку выбрали для своего первого приложения.
Я так понимаю это будет фильтрация к интернет-магазину или просто группе товаров, что бы подобрать нужный.
Вот моменты, на которые вам необходимо обратить внимание в любом случае:
1) источник данных. более чем уверен, что он у вас должен быть не в массива, а динамический, т.к. если это реальное приложение и завтра появится диагональ 15.5 или производитель HaoBao, которых у вас нет, то придется вносить изменения в исходный код.
2) необходимо четко прописать на бумаге предварительно очередность и предметную модель, что бы знать на сколько уровней "углубляться"

Далее общее советы.
Если делать как предложили вы, то вам понадобятся списки ListView (номер урока я приводил). При нажатии на элемент списка вы смотрите в коде, какой элемент был нажат и вызываете следующую активити со списком необходимых параметров (диагонали в вашем примере). И так далее до самого нижнего уровня.
Но я бы делал по-другому. Все товары (если это ноутбуки) я бы хранил в БД, а пользователь имел бы возможность сделать выбор при помощи CheckBox'ов, т.к. в распространенной ситуации, когда нужны 15 _и_ 17, ваша модель фильтрации абсолютно непригодна. После выбора всех чекбоксов в группах производится 1 выбор из базы данных и результат уже можно отобразить в виде ListView. как-то так.
Вообще трудно что-либо советовать, не зная сути задачи, может вы просто потренироваться решили с ListView, тогда делайте как сами предлагали.
Удачи

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 03 апр 2012, 19:23

А поскажите есть в ListView команда, чтобы убрать горизональные линии между данными?
А также в TextView я мог подключить свой шрифт:
Typeface tf = Typeface.createFromAsset(getAssets(), "ArnoPro-Bold.otf");
TextViewNew.setTypeface(tf);

А такое же можно сделать в ListView?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как автоматически присвоить компоненту TextView значение

Сообщение andev » 03 апр 2012, 22:20

laandrew писал(а): А поскажите есть в ListView команда, чтобы убрать горизональные линии между данными?

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

	    <ListView
	        android:id="@android:id/list"
	        android:layout_height="fill_parent"
	        android:layout_width="fill_parent"
	        android:background="@color/white"
	        android:divider="@color/gray"
	        android:dividerHeight="0dp" />
dividerHeight = 0dp или Color'ы приравнять divider = background

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 04 апр 2012, 09:00

В TextView я мог подключить свой шрифт:

Typeface tf = Typeface.createFromAsset(getAssets(), "ArnoPro-Bold.otf");
TextViewNew.setTypeface(tf);

А такое же можно сделать в ListView?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как автоматически присвоить компоненту TextView значение

Сообщение andev » 04 апр 2012, 10:19

создаете layout с одним ваши TextView и в нем необходимые настройки (цвет, шрифт, размер)
Затем при создании адаптера для ListView указываете в качестве источника 1 элемента не стандартный андроидовский (или какой там у вас), а вот этот, только что созданный. И всех делов

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 07 апр 2012, 11:22

Я сделал Layout:

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

<?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:id="@+id/ItemText"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 style="@style/CodeFont4"
 android:textColor="#000"
 android:text="">
</TextView>
</LinearLayout>
Потом сделал для него item.java

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

package ru.AndrewIvanov.Mozart;

import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;

public class item extends MyParentActivity {
	private TextView ItemText;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item);
        Typeface tf = Typeface.createFromAsset(getAssets(), "ArnoPro-Bold.otf"); 
        ItemText = (TextView)findViewById(R.id.ItemText);
        ItemText.setTypeface(tf);       
    }
}
Присвоил своему GridView параметры
GridView gv = (GridView) findViewById(R.id.gridView1);
adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.ItemText, items);
gv.setAdapter(adapter);

Но шрифт на мой (ArnoPro-Bold.otf) не изменился.

Подскажите, пожалуйста, что я сделал не так?

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

Re: Как автоматически присвоить компоненту TextView значение

Сообщение KamiSempai » 07 апр 2012, 13:47

Не могу понять, какие цели были при написании этой программы.
Почему в адаптер передается тот же Layout, что и в Activity?
Что за массив items?
Что это за класс вообще такой, MyParentActivity?
Где в файле разметки находится GridView? Я его не нашел.
Почему именно GridView, а не ListView?

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

laandrew
Сообщения: 53
Зарегистрирован: 02 апр 2012, 09:40

Re: Как автоматически присвоить компоненту TextView значение

Сообщение laandrew » 07 апр 2012, 18:29

Цель. Присвоить GridView свой собственный шрифт (ArnoPro-Bold.otf) на основе TextView. Т.е. я присвоил шрифт ArnoPro-Bold.otf компоненту TextView, потом пытаюсь шрифт через компонент TextView передать компоненту GridView. Но шрифт не присваивается. Код всего этого в предыдущем сообщении.

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

Re: Как автоматически присвоить компоненту TextView значение

Сообщение KamiSempai » 08 апр 2012, 20:58

GridView нельзя присвоить шрифт по тому, что сам он текст не отображает. Это лишь контейнер для отображения в виде сетки того, что ему передает адаптер.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

Re: Как автоматически присвоить компоненту TextView значение

Сообщение damager82 » 09 апр 2012, 10:16

laandrew писал(а):Подскажите, пожалуйста, что я сделал не так?
Вы меняете программно шрифт для элемента TextView (R.id.ItemText), который находится в Activity. И он меняется.
А Grid читает R.layout.item, видит там R.id.ItemText с дефолтовым шрифтом и отображает его.

Выхода тут два:
1) или свой шрифт для TextView надо указать в layout-файле сразу (но, по-моему, это невозможно)
2) или свой кастом-адаптер делать и там программно задавать шрифт в методе getView
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

mkm
Сообщения: 14
Зарегистрирован: 02 май 2012, 13:16

Re: Как автоматически присвоить компоненту TextView значение

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

Подскажите пожалуйста..
Необходимо сделать так чтобы пользователю отображался большой текст..в смысле объемный..типа инструкции к игре и так далее..как это сделать? не могли бы вы подробно прописать или указать ссылку на соответствующий урок..
Объясните плиз поподробнее для чайника:)

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

Re: Как автоматически присвоить компоненту TextView значение

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

mkm писал(а):Необходимо сделать так чтобы пользователю отображался большой текст
Используете ScrollBar и TextView

В layout пишете чтонить подобное:

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

<?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="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <TextView
                android:id="@+id/tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="" />
        </LinearLayout>
    </ScrollView>

</LinearLayout>
В TextView текст можно положить тремя способами:

1) Добавить его в прямо в вышеуказанный код layout
2) Создать элемент String в res/values/strings.xml, поместить в него весь текст, а в layout указать этот String в свойстве android:text у TextView
3) Закинуть текстовый файл в папку assets в проекте. И его содержимое выводить в TextView:

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

		tv = (TextView) findViewById(R.id.tv);

		try {

			BufferedReader br = new BufferedReader(new InputStreamReader(
					getAssets().open("rules.txt")));
			String text = "";
			StringBuilder sb = new StringBuilder();
			while ((text = br.readLine()) != null) {
				sb.append(text);
			}
			br.close();
			tv.setText(sb.toString());

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

Первый способ самый легкий, третий - самый элегантный )
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

mkm
Сообщения: 14
Зарегистрирован: 02 май 2012, 13:16

Re: Как автоматически присвоить компоненту TextView значение

Сообщение mkm » 19 май 2012, 22:56

Извиняюсь конечно за глупый вопрос (думаю что для вас он покажется достаточно легким)
Добавил текст, но переноса на новую строку нету..как его сделать???

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Как автоматически присвоить компоненту TextView значение

Сообщение andev » 20 май 2012, 13:49

Куда вы его добавили и почему должен быть перенос (выход за длину экрана или в произвольном месте)?

mkm
Сообщения: 14
Зарегистрирован: 02 май 2012, 13:16

Re: Как автоматически присвоить компоненту TextView значение

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

Я его добавил прямо в текст.
Хотя даже если добавить в strings, все равно тоже самое. Переносов на новую строку нету.
Допустим текст.
Иванов
Иван
Иванович.
А в приложении все пишет в одну строку..

Ответить