Форум программистов, компьютерный форум CyberForum.ru

Слушатель для события касания по тексту - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
02.04.2014, 20:55     Слушатель для события касания по тексту #1
Подскажите пожалуйста как создать обработчик события касания по разному тексту?
Допустим есть StringBuilder str
str заполнен с помощью str.append() названиями папок sd карты.
Потом всё записываю в String с помощью String s=str.toString(); и вывожу на экран название папки с новой строки с помощью TextView. Как сделать обработчик для каждой папки отдельно?
Наверно надо создать что-то наподобии ключей map, и каждой строке с названием папки создавать новый слушатель OnTouchListener.
Или подскажите, как надо правильно обрабатывать строки на экране, если не использовать ListView и ListActivity?

Добавлено через 6 минут
или надо получать координаты касания экрана и вычислять, какой текст находится по данным координатам?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
02.04.2014, 21:17     Слушатель для события касания по тексту #2
Цитата Сообщение от phpk Посмотреть сообщение
надо получать координаты касания экрана и вычислять
Конечно! Немного глючно будет... особенно при длинных строках и перенос строк. Могут быть нюансы с размером строк и настройками TextView.
А правильнее всего сделать ListView. Там обработчик на строки уже встроен!
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
03.04.2014, 19:57  [ТС]     Слушатель для события касания по тексту #3
Вот есть допустим код, только без xml интерфейса.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.mycompany.files;
 
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import android.app.*;
import android.os.*;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.*;
import android.view.MotionEvent;
import android.view.View.OnTouchListener;
import android.view.View.OnClickListener;
import android.widget.*;
import java.io.*;
import android.view.Window;
import android.view.WindowManager;
import java.util.*;
 
public class MainActivity extends Activity 
implements OnTouchListener, OnClickListener
{
    LinearLayout ly;
    TextView txt;
    File f;
    float x,y,xtxt,ytxt;
    String s;
    ScrollView scrl;
    StringBuilder str=new StringBuilder();
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ly=new LinearLayout(this);
        ly.setOrientation(1);
        txt=new TextView(this);
        scrl=new ScrollView(this);
        scrl.addView(txt);
        ly.addView(scrl);
        setContentView(ly);
        files("sdcard/");
    }
 
    @Override
    public void onClick(View v)
    {
        
    }
 
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        x=event.getX();
        y=event.getY();
        
        return true;
    }
    
    void files(String path){
        f=new File(path);
 
        for (String file: f.list())
        {
            str.append(file+"\n");
        }
        
        s = str.toString();
        txt.setText(s);
    }
}
Тут есть скрол-прокрутка. На экран выводятся папки, каждая с новой строки, и скролом можно прокручивать. Как в этом случае вычислять координаты текста в точке касания экрана подскажите пожалуйста?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
03.04.2014, 21:35     Слушатель для события касания по тексту #4
а зачем такие сложности? Список красивее и удобнее! Если очень хочется, убираете (немного разобраться) изменение цвета строки на нажатие и тогда выглядит как обычный текст!
http://developer.alexanderklimov.ru/...s/listview.php
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
03.04.2014, 22:45  [ТС]     Слушатель для события касания по тексту #5
Цитата Сообщение от Tester64 Посмотреть сообщение
Если очень хочется, убираете (немного разобраться) изменение цвета строки на нажатие и тогда выглядит как обычный текст!
а можно подробней?
Возможно вы и правы, лучше ListView, просто хотелось бы узнать, как в такой ситуации обрабатывать касание и выбор текста в TextView?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
04.04.2014, 13:33     Слушатель для события касания по тексту #6
Цитата Сообщение от phpk Посмотреть сообщение
можно подробней?
А что подробнее? Для начала повторите уроки! Клик по строкам там обьяснен! Подобное есть и в примерах от гугла.
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
06.04.2014, 20:53  [ТС]     Слушатель для события касания по тексту #7
а так получится определить координаты текста?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public class MainActivity extends Activity 
implements OnTouchListener, OnClickListener
{
    LinearLayout ly;
    TextView[] txt;       //создаётся массив из TextView  !!!
    File f;
    float x,y,xtxt,ytxt;
    String s;
    ScrollView scrl;
    StringBuilder str=new StringBuilder();
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ly=new LinearLayout(this);
        ly.setOrientation(1);
 
        scrl=new ScrollView(this);
 
        ly.addView(scrl);
        setContentView(ly);
        files("sdcard/");
    }
 
    @Override
    public void onClick(View v)
    {
        
    }
 
    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        x=event.getX();
        y=event.getY();
        
        return true;
    }
    
    void files(String path){
        f=new File(path);
        String[] mas = f.list();
        for (int z=0; z < mas.length; z++)
        {
            str.append(mas[z]+"\n");
            txt[z] = new TextView(this);
            txt[z].setText(mas[z]);
            scrl.addView(txt[z]);             //       !!!
        }
        
        s = str.toString();
    }
}
т.е. для каждой папки создаётся новый TextView чтобы можно было обратиться к координатам текста, к примеру:
txt[z].getX();

Добавлено через 3 часа 24 минуты
массив из TextView вобще используют?
Или так нельзя делать?
phpk
25 / 25 / 6
Регистрация: 15.05.2013
Сообщений: 1,005
07.04.2014, 21:06  [ТС]     Слушатель для события касания по тексту #8
кто-то подскажет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2014, 01:28     Слушатель для события касания по тексту
Еще ссылки по теме:

Узнать, запущен ли слушатель Android
Android Обработка касания touch
Android Touch – обработка касания
Android Как можно реализовать слушатель новых сообщений?
Проверка касания экрана в любом месте Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
08.04.2014, 01:28     Слушатель для события касания по тексту #9
Вы плохо задали вопрос! Я так и не понял что Вам от строк нужно! Еще и Х??? Каждую букву ловите?
Разберитесь с адаптером. Создайте свой для хранения и вывода строк. Обработайте клик на строках. В том ученбике что я дал ссылкой большинство этого есть! Зачем мне нужен Ваш код метода заполнения строк из имен файлов если у Вас проблемы только с выводом и обработкой клика по строкам?
Судя по Вашей активности на сайте, Вы в андроиде новичок! Пройдите сначала ВСЕ уроки по работе со списком... Это учебный курс (минимум) на несколько дней...

Добавлено через 5 минут
Цитата Сообщение от phpk Посмотреть сообщение
массив из TextView вобще используют?
Или так нельзя делать?
Используют! Можно! Но обычно не для подобных целей. В нем удобно хранить текст большой длины (больше 2-3х строк) и не заботится о переносах строк. Например если нужен справочник с описанием... Или вывести тестовый лог пользователю...
Yandex
Объявления
08.04.2014, 01:28     Слушатель для события касания по тексту
Ответ Создать тему
Опции темы

Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru