728x90
Android Layout 을 작성하다보면 종종 ScrollView를 사용하는 경우가 있다. ScrollView는 길어지는 높이로 인해 화면에서 일부 View가 잘리는 현상을 상하 스크롤을 통해 해소할 수 있는 View이다.
주의할점: 스크롤뷰에는 단 하나의 자식 View만 포함되어야 한다!!
그래서, 여러개의 View를 넣으려면 스크롤뷰 안에 LinearLayout(리니어레이아웃) 또는 RelativeLayout 등의 ViewGroup을 자식 View로 지정하고 그 안에 다양한 View를 넣는 구조를 택하여 해결할 수 있다.
<ScrollView
android:id="@+id/scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity ="center"
android:fillViewport="true"
android:layout_marginTop="0dp"
android:background="#000000">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:gravity="left"
android:textColor="#FFFFFF"/>
<TextView
android:id="@+id/consoleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:ellipsize="start"
android:gravity="left"
android:textColor="#FFFFFF"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
|
아래 코드는 콘솔 앱에 사용된 코드 일부이다.
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
Context mContext;
TextView mTitleTextView;
TextView mDumpTextView;
ScrollView mScrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.this;
initView();
}
private void initView() {
mTitleTextView = (TextView) findViewById(R.id.info);
mDumpTextView = (TextView) findViewById(R.id.consoleText);
mScrollView = findViewById(R.id.scrollview);
mScrollView.setVerticalScrollBarEnabled(true); // 수직방향 스크롤바 사용 가능하도록 설정
mDumpTextView.setMovementMethod(new ScrollingMovementMethod());
mDumpTextView.setTextSize(Constants.mTextFontSize);
mDumpTextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mDumpTextView.setTextIsSelectable(true); // 복사 가능
mDumpTextView.setCursorVisible(true);
SpannableString highlightString = new SpannableString(mDumpTextView.getText());
highlightString.setSpan(new BackgroundColorSpan(ContextCompat.getColor(mContext, R.color.mediumspringgreen))
, 0, mDumpTextView.getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
return false;
}
});
mDumpTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDumpTextView.setTextIsSelectable(true); // 복사 가능
mDumpTextView.setCursorVisible(false);
}
});
}
private void updateReceivedData(String data) {
final String message = data;
mDumpTextView.setTextColor(Color.WHITE);
mDumpTextView.append(message);
mDumpTextView.setTextIsSelectable(false); // 텍스트 클립보드 복사
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mDumpTextView.setElegantTextHeight(true);
}
mDumpTextView.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
mDumpTextView.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);
mDumpTextView.setSingleLine(false);
refreshView();
}
private void refreshView(){
mScrollView.postDelayed(new Runnable() {
@Override
public void run() {
mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
},100);
mScrollView.smoothScrollTo(0, mDumpTextView.getBottom());
}
}
|
728x90
'안드로이드 > Layout' 카테고리의 다른 글
CardView Layout 예제 (0) | 2020.04.12 |
---|---|
Meterial Design 로그인 Layout 예제 (0) | 2020.03.21 |
Dynamic Layouts (0) | 2019.01.06 |
Android Fragment 기본 예제 (0) | 2018.09.11 |
FloatingActionButton(FAB) (0) | 2018.08.15 |