내 안드로이드 앱에 가로 및 세로 스크롤보기가 있습니다. 다음 버튼과 이전 버튼이 있습니다. scollview.isie가 필요한 경우에만이 버튼을 표시하고 scrollview 내용의 너비는 표시 너비를 초과합니다. 도달 할 때 이전 및 다음 버튼을 숨기려고합니다. 첫 번째 항목과 마지막 항목을 각각 클릭하십시오. 다음 버튼/이전 항목을 클릭하면 어떻게됩니까?안드로이드에서 버튼 클릭시 HorizontalScrollView를 스크롤하는 방법은 무엇입니까?
main.xml에
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff" >
<Button
android:id="@+id/btnPrevoius"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text="Previous"
android:visibility="gone" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_toLeftOf="@+id/btnNext"
android:layout_toRightOf="@+id/btnPrevoius"
android:fillViewport="true" >
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
</HorizontalScrollView>
<Button
android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="Next"
android:visibility="gone" />
</RelativeLayout>
활성
public class SampleActivity extends Activity {
private static LinearLayout linearLayout;
private static HorizontalScrollView horizontalScrollView;
private static Button btnPrevious;
private static Button btnNext;
private static int displayWidth = 0;
private static int arrowWidth = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
linearLayout = (LinearLayout) findViewById(R.id.linearLayout1);
btnPrevious = (Button) findViewById(R.id.btnPrevoius);
btnNext = (Button) findViewById(R.id.btnNext);
for (int i = 0; i < 15; i++) {
Button button = new Button(this);
button.setTag(i);
button.setText("---");
linearLayout.addView(button);
}
ViewTreeObserver vto = linearLayout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = linearLayout.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
Display display = getWindowManager().getDefaultDisplay();
displayWidth = display.getWidth();
if (linearLayout.getMeasuredWidth() > (displayWidth - 40)) {
btnPrevious.setVisibility(View.VISIBLE);
btnNext.setVisibility(View.VISIBLE);
}
}
});
btnPrevious.setOnClickListener(listnerLeftArrowButton);
horizontalScrollView.setOnTouchListener(listenerScrollViewTouch);
}
private OnTouchListener listenerScrollViewTouch = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
showHideViews();
return false;
}
};
private OnClickListener listnerLeftArrowButton = new OnClickListener() {
@Override
public void onClick(View v) {
horizontalScrollView.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0));
}
};
public static void showHideViews() {
int maxScrollX = horizontalScrollView.getChildAt(0).getMeasuredWidth()- displayWidth;
Log.e("TestProjectActivity", "scroll X = " +horizontalScrollView.getScrollX());
Log.i("TestProjectActivity", "scroll Width = " +horizontalScrollView.getMeasuredWidth());
Log.d("TestProjectActivity", "Max scroll X = " + maxScrollX);
if (horizontalScrollView.getScrollX() == 0) {
hideLeftArrow();
} else {
showLeftArrow();
}
if (horizontalScrollView.getScrollX() == maxScrollX) {
showRightArrow();
} else {
//hideRightArrow();
}
}
private static void hideLeftArrow() {
btnPrevious.setVisibility(View.GONE);
}
private static void showLeftArrow() {
btnPrevious.setVisibility(View.VISIBLE);
}
private static void hideRightArrow() {
btnNext.setVisibility(View.GONE);
}
private static void showRightArrow() {
btnNext.setVisibility(View.VISIBLE);
}
}
'maxScrollX'
값 내게 정확하지 않다. 최대 스크롤 값을 찾는 방법은 무엇입니까? 사전에 감사
죄송합니다.이 게시물이 내 문제를 어떻게 해결할 수 있는지 이해할 수 없습니다. –
@DevuSoman은 내가 게시 한 링크를 보았습니다.이 방법으로 가로 스크롤보기가 작동합니다. 또한이 버튼을 숨기려면 첫 번째 조건에 대해 false로 enablity를 설정하고 반대의 경우에는 반대로 수행해야합니다. 각 버튼에 onclick 리스너와 선택에 따라 원하는 걸 할 .... –
@DevuSoman 정확히 뭐야 .. 당신은 그냥 패딩 및 사소한 레이아웃 조정을 설정해야합니다. 내가 게시 한 링크로 해봤습니까? 당신의 버튼을 클릭 리스너에 적용하십시오. ur 선택에 따라. 당신은 클릭 할 때 무엇을하고 싶습니까? –