ListView
のAndroidでは、左側にscrollbar
を表示させるにはどうすればよいですか?`scrollbar`を左側に表示させるには?
答えて
例:他の2つの答えとして
mView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT);
View.SCROLLBAR_POSITION_LEFTを使用して、任意のビューのスクロールバーの位置を左に移動できます。
は、一つの可能性はSCROLLBAR_POSITION_LEFTとView.setVerticalScrollbarPosition()を使用して、言及しています。しかし、巨大な注意点の1つは、APIレベル11+が必要であるということです。これは、Androidのインストールの10%未満を占めるアカウントの作成時に発生します。ほとんどのアプリケーションでは、それは受け入れられません。
Androidの旧バージョンでは、スクロールバーをオフにして、メインレイアウトを幅の狭いレイアウトでミラーリングするだけで非常にクルージングを行うことができますスクロールバーに収まるのに十分な大きさになり、メインビューがスクロールされるとscrollyBy()と表示されます( onScrollChanged()を上書きして)。
しかし、スクロールバーを左に動かすことが非常に魅力的な理由がない限り、実際にはお勧めできません。ほとんどの場合、Androidのデフォルト設定に従うだけで、アプリが他のアプリと同じようにフィットし、他のアプリと同じように動作するようにします。
私のハックを試してみてください。少なくとも2.2以上で動作するようです。
import java.lang.reflect.Field;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
/**
* This class fixes the lack of setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT) before API level 11
* @author Genadz Batsyan
*/
public class ListViewWithLeftScrollBar extends ListView {
private static final String LOG_TAG = ListViewWithLeftScrollBar.class.getSimpleName();
private static final boolean DEBUG = true;
private boolean patchInvalidate;
public ListViewWithLeftScrollBar(Context context) {
super(context);
moveVerticalScrollbarToTheLeft();
}
public ListViewWithLeftScrollBar(Context context, AttributeSet attrs) {
super(context, attrs);
moveVerticalScrollbarToTheLeft();
}
public ListViewWithLeftScrollBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
moveVerticalScrollbarToTheLeft();
}
@Override
public void invalidate(Rect r) {
invalidate(r.left, r.top, r.right, r.bottom);
}
@Override
public void invalidate(int left, int top, int right, int bottom) {
int width = right - left;
if (DEBUG) log("invalidate original w:"+ getWidth() +" h:"+ getHeight()+" rect:"+left+", "+top+", "+right+", "+bottom);
if (patchInvalidate && right == getWidth() && top == 0 && bottom == getHeight() && width < 30) {
// The above condition should ensure that ListView is VERY likely to be invalidating the scrollbar.
// In fact ListView appears to not invalidate anything except the scrollbar, ever.
left = 0;
right = left + width;
if (DEBUG) log("invalidate patched w:"+ getWidth() +" h:"+ getHeight()+" rect:"+left+", "+top+", "+right+", "+bottom);
}
super.invalidate(left, top, right, bottom);
}
private void moveVerticalScrollbarToTheLeft() {
try {
if (DEBUG) log("moveVerticalScrollbarToTheLeft: Trying API Level >=11");
tryApiLevel11();
if (DEBUG) log("moveVerticalScrollbarToTheLeft: API Level >=11 success");
} catch (Throwable t1) {
if (DEBUG) {
log("moveVerticalScrollbarToTheLeft: API Level >=11 FAILED");
t1.printStackTrace();
}
try {
if (DEBUG) log("moveVerticalScrollbarToTheLeft: Trying hack for API Level <11");
tryApiLevelPre11();
patchInvalidate = true;
if (DEBUG) log("moveVerticalScrollbarToTheLeft: API Level <11 hack success");
} catch (Throwable t2) {
if (DEBUG) {
log("moveVerticalScrollbarToTheLeft: API Level <11 hack FAILED");
t2.printStackTrace();
}
}
}
}
@SuppressLint("NewApi")
private void tryApiLevel11() {
setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT);
}
private void tryApiLevelPre11() throws Exception {
Class<?> viewClass = View.class;
Field scrollCacheField = viewClass.getDeclaredField("mScrollCache");
scrollCacheField.setAccessible(true);
Object scrollCache = scrollCacheField.get(this);
if (DEBUG) log("scrollCache: "+ scrollCache);
Field scrollBarField = scrollCache.getClass().getDeclaredField("scrollBar");
scrollBarField.setAccessible(true);
Object scrollBar = scrollBarField.get(scrollCache);
if (DEBUG) log("scrollBar: "+ scrollBar);
Field verticalThumbField = scrollBar.getClass().getDeclaredField("mVerticalThumb");
verticalThumbField.setAccessible(true);
Object verticalThumb = verticalThumbField.get(scrollBar);
if (DEBUG) log("verticalThumb: "+ verticalThumb);
Drawable verticalThumbDrawable = (Drawable) verticalThumb;
Drawable replacementVerticalThumbDrawable = new LayerDrawable(new Drawable[]{ verticalThumbDrawable }) {
@Override
public void setBounds(int left, int top, int right, int bottom) {
if (DEBUG) log("setBounds original: "+left+", "+top+", "+right+", "+bottom);
int width = right - left;
left = 0;
right = left + width;
if (DEBUG) log("setBounds patched: "+left+", "+top+", "+right+", "+bottom);
super.setBounds(left, top, right, bottom);
}
};
verticalThumbField.set(scrollBar, replacementVerticalThumbDrawable);
}
private static void log(String msg) {
Log.d(LOG_TAG, msg);
}
}
2.2.1で試したところ、うまくいきませんでした。 –
'if(Build.VERSION_CDK_INT
- 1. ScrollBar常に表示
- 2. d3の左側にyaxisを表示
- 3. Drupal - 左側のバーにフォーラムを表示
- 4. 画面の左側に縦に表示されるアンドロイドタブ
- 5. 2列のポートフォリオページを作成する方法、左側はナビゲーション、右側は画像が左側のナビゲーションワードに表示されたときの画像表示
- 6. ページの左側と右側にブートストラップのウェルを表示
- 7. ブートストラップメニュー - ボタンでメニューが表示されませんでした。メニューは右側に行く間、ボタンが左側に
- 8. phpmyadminでテーブルをインポートした後、左側のパネルに表示されません
- 9. WPFメニューがウィンドウの左側に表示されます
- 10. 携帯端末の左側にブートストラップが表示されます
- 11. IMGをコンテナの左側にオーバーフローさせるには? CSS
- 12. 水平メインメニューをクリックするとページの左側にサブメニューが表示されます;表示/非表示divエラー
- 13. gnu画面でパテスプリット-v右側の表示が左側に表示されます
- 14. DirectShow&.Net - イメージの左側にあるストライプがビットマップに表示されますか?
- 15. マスターVCをUISplitViewControllerの右側に表示させる方法は?
- 16. RelativeLayout ImageViewをイメージの左側に、もう1つをイメージビューの左側に表示します。
- 17. 表示ページの左側にある最初の列の4行
- 18. チェックボックスを左側に合わせる
- 19. SplitPaneを作成するには、左側に表示するタブが右側に含まれていますか?
- 20. setMultiChoiceItems Lableの左側にチェックボックスを表示しますか?
- 21. JSONファイルからURLを作成し、テキストの左側に表示
- 22. テキストの左側にタブバーのアイコンを表示したい
- 23. 通貨テキストとボックスを左側に表示
- 24. ナビゲーションバーに色を塗ることができません。白い部分が左側に表示されます
- 25. Ruby On RailsとBootstrapの左側にロゴが表示されているNavbar
- 26. IIS 8.5にURLの左側にssl記号が表示されない
- 27. ドロップダウンメニューがサブメニューの代わりに左側に表示されています
- 28. JavafxステージにV-Scrollbarが表示されない
- 29. ScrollledFormのGridLayoutにscrollBarが表示されない
- 30. rdlcの左側ではなく、テーブルヘッダーの上に列を表示する方法
これは、XML経由でも可能です:アンドロイド:verticalScrollbarPositionは= –
は悲しい[NavigationView](http://developer.android.com/intl/ru/reference/android/support/design/で働いていない "左"ウィジェット/ NavigationView.html)(API 23)。 – Luten