2

Итак, Кто-нибудь знает, как создать следующую сетку? Мне нужно установить интерактивное событие каждое слово:GridView: использование RecyclerView или просто TextView с интерактивными словами

pic 1

Если четыре слов не подходят к линии, то должны быть показано три в линии:

enter image description here

, если это будет превышать строку n слов, тогда должно быть указано n слов в строке. Есть ли кто-нибудь, как это реализовать?

ответ

2

Вы можете использовать SpannableString и ClickableSpan. эта активность, например, создает TextView с текстом и управляет щелчки на каждом слове:

public class MainActivity extends AppCompatActivity { 

    Activity activity; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     activity = this; 
     TextView textView = (TextView) findViewById(R.id.textView); 

     String text = "up down Antidisestablishment over took dropped lighten with from throught fell on up down Antidisestablishment over took dropped lighten with from throught fell on"; 

     String[] textArray = text.split(" "); 

     SpannableString ss = new SpannableString(text); 

     int start = 0; 
     int end = 0; 

     for(final String item : textArray){ 

      end = start + item.length(); 
      ClickableSpan clickableSpan = new ClickableSpan() { 

       @Override 
       public void onClick(View textView) { 
        Toast.makeText(activity, "Say " + item+ "!", Toast.LENGTH_SHORT).show(); 
       } 
       @Override 
       public void updateDrawState(TextPaint ds) { 
        super.updateDrawState(ds); 
        ds.setUnderlineText(false); 
       } 
      }; 
      ss.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      start += item.length()+1; 
     } 
     textView.setText(ss); 
     textView.setMovementMethod(LinkMovementMethod.getInstance()); 
     textView.setHighlightColor(Color.TRANSPARENT); 

    } 
} 

и вот activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity" 
    android:padding="5dp"> 

    <TextView 
     android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="24sp" 
     android:textColor="#000000" 
     android:textColorLink="#000000"/> 

</LinearLayout> 

, если нажать на любое слово, вы получите всплывающее окно с этим слово

EDIT: чтобы оправдать текст использовать библиотеку android-justifiedtextview

но не библиотеку из Gradle, есть старая версия, которая не поддерживает SpannableString. Я рекомендую просто скопировать класс JustifyTextView из git в ваш проект. Затем вы можете использовать эту точку зрения в вашем .xml как:

<com.yourdomain.yourproject.JustifyTextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="24sp" 
    android:textColor="#000000" 
    android:textColorLink="#000000"/> 

вот что я с этой библиотекой: justified text

Вы также можете изменить библиотеку, чтобы сохранить последнюю строку неоправданным. Каждое слово в тексте по-прежнему доступно для кликов.

+0

Спасибо за ответ Alexander, но мне нужно найти слова, как выглядит изображение. Мне нужно показать слова как оправдывающий стиль. –

+0

http://stackoverflow.com/a/20578041/4001920 вот обоснование –

+0

Я не использую html, и я попробовал TextJustify-Android, но не помог –

1

Если количество предметов, которые вы должны добавить, немного, рассмотрите возможность использования FlowLayout. Он расширяет LinearLayout, поэтому просто оберните его в ScrollView, добавьте свои взгляды на него динамически, и вам должно быть хорошо идти.