有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使文本中的所有单词都可单击?

我正在尝试用Java开发一个Android应用程序。我需要分离文本中的所有单词(代码中的bookText)并使其可点击。我该怎么做?如果你能帮助我,我将不胜感激。提前谢谢

public class BookActivity extends AppCompatActivity {

public static final String BOOK_TEXT = "com.example.altaybook.BOOK_TEXT";
BookViewModel bookViewModel;
private TextView bookTextView;
private String bookName;
private String bookText;
ProgressBar bookTextProgressBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_book);

    bookTextView = findViewById(R.id.book_text_id);
    bookTextProgressBar = findViewById(R.id.bookTextProgressBar);
    Intent intent = getIntent();
    final int bookPosition = intent.getIntExtra(BOOK_TEXT, -1);

    bookViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(BookViewModel.class);
    bookViewModel.getAllBooks().observe(this, new Observer<List<Book>>() {
        @Override
        public void onChanged(List<Book> books) {
            bookName = books.get(bookPosition).getName();
            setTitle(bookName);
            bookText = books.get(bookPosition).getText();
            SetTextAsyncTask setTextAsyncTask = new SetTextAsyncTask();
            setTextAsyncTask.execute();
            bookTextView.setMovementMethod(LinkMovementMethod.getInstance());

        }
    });
}

public class SetTextAsyncTask extends AsyncTask<String, Void, Void> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        bookTextProgressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected Void doInBackground(String... strings) {
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        bookTextView.setText(bookText);
        bookTextProgressBar.setVisibility(View.GONE);
    }
}

}


共 (1) 个答案

  1. # 1 楼答案

    你可以使用LinearLayout。下面是一个例子:

    • 活动手册。xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">
    
        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:orientation="horizontal"
            android:gravity="center"
            android:id="@+id/container"/>
    
    </LinearLayout>
    
    • 图书活动。爪哇
    public class BookActivity extends Activity
    {
        public static final String BOOK_TEXT = "com.example.altaybook.BOOK_TEXT";
        
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_book);
            
            LinearLayout ll = findViewById(R.id.container);
            String[] splitText = BOOK_TEXT.split("\\.");
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            
            for(int i=0; i < splitText.length; i++) {
                TextView content = new TextView(this);
                if(i == 0) { content.setText(splitText[i]);
                } else { content.setText("." + splitText[i]); }
                content.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(BookActivity.this, "You clicked: " + ((TextView)view).getText(), Toast.LENGTH_SHORT).show();
                    }
                });
                ll.addView(content, params);
            } 
        }
    }