2011-10-19 24 views
3

我有應用程序小部件與TextView中。RemoteViews + TextView + setGravity

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/widgetText" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:text="@string/defaultWidgetText" 
    android:gravity="center" 
    /> 
</FrameLayout> 

我試圖通過調用

views.setInt(R.id.widgetText, "setGravity", Gravity.CENTER); 
從遠程視窗

改變文本對齊方式。但它使「問題加載小部件」 其他setInt(...)工作正常。

我不想創建另一個TextViews或佈局。有沒有其他方法可以改變Gravity?

回答

-1

所以...這是我的解決方案。 控件佈局:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/top_left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|left" 
    /> 
<TextView 
    android:id="@+id/top_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|center_horizontal" 
    /> 
<TextView 
    android:id="@+id/top_right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="top|right" 
    /> 

<TextView 
    android:id="@+id/left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="left|center_vertical" 
    /> 
<TextView 
    android:id="@+id/center_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="visible" 
    android:gravity="center" 
    /> 
<TextView 
    android:id="@+id/right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="right|center_vertical" 
    /> 

<TextView 
    android:id="@+id/bottom_left_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|left" 
    /> 
<TextView 
    android:id="@+id/bottom_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|center_horizontal" 
    /> 
<TextView 
    android:id="@+id/bottom_right_text" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:visibility="invisible" 
    android:gravity="bottom|right" 
    /> 
</FrameLayout> 

和的onUpdate(...)方法:

widgetViews = new Hashtable<Integer, Integer>(); 

widgetViews.put(GRAVITY_TOP_LEFT, R.id.top_left_text); 
widgetViews.put(GRAVITY_TOP, R.id.top_text); 
widgetViews.put(GRAVITY_TOP_RIGHT, R.id.top_right_text); 

widgetViews.put(GRAVITY_LEFT, R.id.left_text); 
widgetViews.put(GRAVITY_CENTER, R.id.center_text); 
widgetViews.put(GRAVITY_RIGHT, R.id.right_text); 

widgetViews.put(GRAVITY_BOTTOM_LEFT, R.id.bottom_left_text); 
widgetViews.put(GRAVITY_BOTTOM, R.id.bottom_text); 
widgetViews.put(GRAVITY_BOTTOM_RIGHT, R.id.bottom_right_text); 

Intent intent = new Intent(context, MinimalisticNotesWidgetActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 
for(int id : widgetViews.values()) 
{ 
    views.setViewVisibility(id, View.INVISIBLE); 
} 

int id = widgetViews.get(textGravity); 

views.setOnClickPendingIntent(id, pendingIntent); 
views.setTextViewText(id, widgetText); 
views.setFloat(id, "setTextSize", fontSize); 
views.setInt(id, "setTextColor", textColor); 
views.setViewVisibility(id, View.VISIBLE); 

附:我知道,這是一個壞的編碼風格,但在互聯網的其他變體看起來一樣=(

1

我的解決辦法是:

// Text Align 
int gravity = widget_pf.getInt(Constants.Prefs.WIDGET_TEXT_ALIGN, 2); 
if (gravity == 0) 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.LEFT); 
else if (gravity == 1) 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.CENTER_HORIZONTAL); 
else 
    remoteViews.setInt(R.id.BalancesLinLayout, "setGravity", Gravity.RIGHT); 

而且在widget_layout.xml:

<LinearLayout 
    android:id="@+id/BalancesLinLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" > 

     <TextView 
      android:id="@+id/SampleText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" 
      android:singleLine="true" 
      android:textColor="#FFFFFF" 
      android:textSize="9sp" /> 

</LinearLayout> 

到目前爲止,這很簡單。