2

私が達成しようとしているのは、ほとんどのTwitterアプリで標準的なものです。テキストビューでは、テキスト文字列の単語の前に「@」メンションまたは「#」ハッシュタグがあり、実際にクリックリスナーを追加できます別の活動を開始するその言葉は、これがどのように達成されるか知っていますか? 以下に、私が達成しようとしていることを示す写真の例を添付しました。

ここに画像の説明を入力

4

2 に答える 2

7

Linkifyクラスを見てください。これにより、特定の正規表現に対して、TextView内にリンクを追加できます。

この記事から以下を抽出しました。

TextView mText = (TextView) findViewById(R.id.mytext);
Pattern userMatcher = Pattern.compile("\B@[^:\s]+");
String userViewURL = "user://";
Linkify.addLinks(mText, userMatcher, userViewURL);

パターンは、上記の例のように、指定されたテキスト内の@usernameなどのテキストをキャッチする、指定されたレギュラー式から新しいパターンを作成するために使用されます。次に、user://スキームを定義する必要があります。これは、クリックをキャッチするアクティビティでも定義する必要があります。最後の1つのLinkify.addLinksは、それらすべてを連携させます。インテントフィルターのAndroid.manifestファイルを見てみましょう。

<activity android:name=”.DirectMessageActivity” > 
    <intent-filter>
        <category android:name=”android.intent.category.DEFAULT”/> 
        <action android:name=”android.intent.action.VIEW” /> 
        <data android:scheme=”user” /> 
    </intent-filter> 
</activity>

@usernameをクリックすると、これはクリックをキャッチしてクリックされた文字列を処理するアクティビティです。はい、ユーザーが@usernameをクリックしたときにDirectMessageActivityに何が送信されるかについては触れませんでした。これは、「username」文字列がDirectMessageActivityに渡されると推測できるためです。この文字列は次のように取得できます。

Uri data = getIntent.getData();
if(data != null){
    String uri = data.toString();
    username = uri.substring(uri.indexOf("@")+1);
}
于 2012-11-18T16:47:36.090 に答える
-1

こうやってみる…………

TextView tv[] = new TextView[subCategory.length];
    for (int i = 0; i < subCategory.length; i++) {
            tv[i] = new TextView(this);
            tv[i].setText(subCategory[i]);
            tv[i].setId(i);
            sCategoryLayout.addView(tv[i]);
            tv[i].setOnClickListener(onclicklistener);
        }

onclicklistener メソッド:

OnClickListener onclicklistener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(v == tv[0]){
            //do whatever you want....
        }
    }
};
于 2012-11-18T16:52:24.430 に答える