2011-02-15 22 views
7

コードからUIを構築していて、ProgressBarウィジェットを正常に追加できますが、ウィジェットのサイズを必要な値に変更することはできません。 50dp)。私は次のコードを試しました。実行時に追加されたProgressBarの幅を変更する

ProgressBar progressBar = new ProgressBar(activity, null, android.R.attr.progressBarStyleHorizontal); 
    progressBar.setMinimumHeight(20); 
    progressBar.setMinimumWidth(100); 

は私も運をプログレスバーLayoutParamsを設定していないが、再び何も、私は別のレイアウトにウィジェットをラップしようとしましたが、それでもない試みました。

私はそれを行う方法がわからないので、誰でも助けてもらえますか? XMLを使用するソリューションがある場合は動作しますが、実行時にディメンションと場所を設定する必要があります。


進捗XMLについては、以下を使用しました。

<ProgressBar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="10dp" 
     android:indeterminateOnly="false" 
     android:progressDrawable="@android:drawable/progress_horizontal" 
     android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal" 
     android:maxWidth="1000dp" 
    /> 

次に、それを膨らませるコードは次のとおりです。これは私たちが議論してきたことの組み合わせです。

<ProgressBar 
     android:id="@+id/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminate="true" 
     android:visibility="visible" 
     style="@android:style/Widget.ProgressBar.Large.Inverse" 
/> 

そしてコード:

LayoutInflater layoutInflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    ProgressBar progressBar = (ProgressBar)layoutInflater.inflate(R.layout.progress_bar, null); 
    progressBar.setMinimumHeight(10); 
    progressBar.setMinimumWidth(200); 
    progressBar.setLayoutParams(new RelativeLayout.LayoutParams(200, 10); 

    progressBar.setMax(100); 
    progressBar.setProgress(getScrollBarValue()); 
    progressBar.setIndeterminate(isIndeterminate()); 
    progressBar.getLayoutParams().width = 200; 
    progressBar.invalidate(); 
+0

解決策は、ウィジェットのソースコードをコピーして、欠落したメソッドを実装することだと思います。クレイジーな解決策に見えますが、これを行う方法が必要です。 – Snowwire

+0

ちょうど確認する:あなたは、スピナースタイルではなく、バースタイルを探していますか?おそらく、スタイル/図形がどこに定義されているかを調べ、それをコピーして調整するだけで十分でしょう。 – sstn

答えて

9

R.layout.activityこの含む

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 
    ProgressBar bar = (ProgressBar)findViewById(R.id.progress); 
    bar.getLayoutParams().height = 500; 
    bar.invalidate(); 
} 

無効()メソッドの呼び出しが、そのような重要なことときの図であります変更を考慮に入れて再描画されます。直感的ではありませんが、変更をバッチすることでパフォーマンスが向上します。

+0

提案した方法を試しましたが、サイズには何の影響もありませんでした。 – Snowwire

+0

私は詳細な2つの方法を使用する必要がありますが、単独で呼び出しても機能しません。私はちょうどProgressBarでこのコードを使用してテスト活動を構築し、それは正常に動作します。だから私は、あなたが書いたコードが実行されていること、そしてb)コードが正しい進捗バーにサイズ調整をしていることを確認することをお勧めします。私はコードを含めるために私の答えを更新しました。 –

+0

まだコードを試してみる機会はありませんでしたが、私がコードで完全に定義しているレイアウトです。だから私はRelativeLayoutを作成し、次にProgressBarである子ビューを追加します。 setContentViewを使用してRelativeLayoutを追加します。 layout.xmlはありません – Snowwire

0

minWidth/minHeight/maxWidth/maxHeightの各パラメータもありますが、XMLまたはスタイル/テーマを介してのみ設定できます。

そうしないと、XMLからProgressBarビューを拡張することができます。

+0

私はあなたが提案したものを試しましたが、ウィジェットの高さは変更できますが、幅は変更できませんでした。私は最大と最小の幅のプロパティは、サイズが有効にするために同じでなければならないことが分かったから。 max sizeプロパティは実行時には変更できません。公開されません。 – Snowwire

+0

ProgressBarの方向はどちらですか?プログレスバーの方向のサイズは、レイアウトによって決まる必要があります。 – sstn

+0

これは当てはまりません。LayoutParamsを使用してコード内のパラメータを設定することができます –

0

だから、あなたは、プログレスバーのために独自のスタイルを定義する必要があります。ここでは

<style name="SmallProgressBar" parent="android:Widget.ProgressBar"> 
    <item name="android:minHeight">10dip</item> 
    <item name="android:maxHeight">35dip</item> 
</style> 

は、あなたがプログレスバーや他のクールな機能の最小値と最大高さと幅を設定することができます。

<ProgressBar 
    android:id="@+id/custom_edit_text_progress_bar" 
    style="@style/SmallProgressBar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:visibility="visible"/> 

あなたのプログレスバーを膨らま

、あなた

getLayoutParams().height = 25 

とプログレスバーの

getLayoutParams().width = 25 

と設定高さ:

さて、あなたはあなたのxmlレイアウトスタイルに設定しますと幅。

注: スタイルで定義した高さと幅を超えることはできません。

関連する問題