2011-12-07 38 views
0

我有一個Eula對話框,其中包含一個textview,我在其中添加鏈接以便可以在文本字符串中識別這些鏈接。我正在使用dpad導航,並需要鏈接才能突出顯示重點是否在他們身上。有沒有辦法給onFocus上的鏈接添加一個狀態?我可以直接將焦點對準正面和負面的按鈕嗎?下面是方法:如何將焦點狀態添加到文本視圖中的鏈接

public static boolean show(final Activity activity) { 
     final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity); 
     if (!preferences.getBoolean(ACCUWX.Preferences.PREFERENCE_EULA_ACCEPTED, false)) { 
     final TextView message = new TextView(activity); 
     final SpannableString s = preferences.getString(ACCUWX.Preferences.PREF_PARTNER_CODE, null).equals(ACCUWX.PartnerCodes.TMOBILE_PARTNER_CODE) 
      || preferences.getString(ACCUWX.Preferences.PREF_PARTNER_CODE, null).equals(ACCUWX.PartnerCodes.TMOBILE_7_PARTNER_CODE)? 
       new SpannableString(activity.getText(R.string.eula_terms_info_tmobile)) 
        : new SpannableString(activity.getText(R.string.eula_terms_info)); 
     Linkify.addLinks(s, Linkify.WEB_URLS); 
     message.setPadding(10, 10, 10, 10); 
     message.setText(s); 
     message.setMovementMethod(LinkMovementMethod.getInstance()); 

      if (ad == null) { 
       ad = new AlertDialog.Builder(activity) 
       .setTitle(R.string.terms_conditions) 
       .setCancelable(false) 
       .setPositiveButton(R.string.agree, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         accept(preferences); 
         if (activity instanceof OnEulaAgreedTo) { 
          ((OnEulaAgreedTo) activity).onEulaAgreedTo(); 
         } 
        } 
       }) 
       .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         refuse(activity); 
        } 
       }) 
       .setOnCancelListener(new DialogInterface.OnCancelListener() { 
        public void onCancel(DialogInterface dialog) { 
         refuse(activity); 
        } 
       }) 

       .setView(message) 
       .create(); 

       ad.show(); 
      } 

      return false; 
     } 
     return true; 
    } 

我無法弄清楚如何將狀態添加到都TXT內的鏈接,而不是他們自己的獨立觀點。

*****編輯***** 如果我添加這行代碼:message.setLinkTextColor(R.color.link_text); 然後我的鏈接不可見。但是這告訴我至少可以識別這些鏈接。這裏是ColorStateList應用存儲在res /顏色(link_text.xml):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:color="#ff0000"/> <!-- pressed --> 
    <item android:state_focused="true" 
      android:color="#ff33ff"/> <!-- focused --> 
    <item android:color="#00ff00"/> <!-- default --> 
</selector> 

下面是截圖: enter image description here

回答

0

使用OnFocusChangeListener,所以:

TextView mTextView = new TextView(this); 
mTextView.setOnFocusChangeListener(new OnFocusChangeListener(){ 

    @Override 
    public void onFocusChange(View arg0, boolean arg1) { 
     // Add your code for the focus change of the textview 

    } 

}); 
+0

但我怎麼只添加狀態的鏈接,而不是textview中的所有文字? – taraloca

+0

我做了上面的一些成功。我現在的問題是,我有一個文本視圖中的3個鏈接...我怎麼分開知道我專注於哪一個?在onFocusChange方法中,我做if(hasFocus)message.setLinkTextColor(Color.MAGENTA);如果不是message.setLinkTextColor(Color.BLUE);當我從「我同意」按鈕進入文本視圖時,所做的就是更改所有鏈接的顏色。我想在每個單獨的鏈接上顯示。 – taraloca

+0

我認爲您的解決方案是創建三個單獨的文字瀏覽,如果您不希望所有三個鏈接一次突出顯示,並且您不希望與它們相關的相同操作。 – coder

相關問題