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

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

Добавлено: 03 апр 2012, 18:19
laandrew
Здравствуйте!

Прошу помочь со следующим вопросом. Мне нужно чтобы в цикле 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]);
}

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

Добавлено: 03 апр 2012, 18:30
andev
Вы не можете обращаться к 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()); // тут понятно

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

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

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

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

Есть меню:
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 дюймов.

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

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

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

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

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

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

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

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

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

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

Добавлено: 03 апр 2012, 22:20
andev
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

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

Добавлено: 04 апр 2012, 09:00
laandrew
В TextView я мог подключить свой шрифт:

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

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

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

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

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

Добавлено: 07 апр 2012, 11:22
laandrew
Я сделал 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) не изменился.

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

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

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

Я бы посоветовал перечитать все уроки и повторить все, что в них делается.

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

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

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

Добавлено: 08 апр 2012, 20:58
KamiSempai
GridView нельзя присвоить шрифт по тому, что сам он текст не отображает. Это лишь контейнер для отображения в виде сетки того, что ему передает адаптер.

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

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

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

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

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

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

Добавлено: 12 май 2012, 10:35
damager82
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();
		}

Первый способ самый легкий, третий - самый элегантный )

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

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

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

Добавлено: 20 май 2012, 13:49
andev
Куда вы его добавили и почему должен быть перенос (выход за длину экрана или в произвольном месте)?

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

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