2018년 11월 3일 토요일

[안드로이드] fragment와 FrameLayout의 사용

화면은 xml에서 레이아웃을 작성한뒤 자바에서 불러오도록 하였다.
MainActivity를 생성하면 자동으로 activity_main.xml파일이 연결되었다.

그렇다면,
1. 클래스를 만들어서 xml파일을 지정하여 화면에 보여주는 방법과(FrameLayout)
2. xml파일에서 클래스를 지정해주는 방법(fragment)를 살펴보도록 하겠다.

1. activity_main.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.    xmlns:app="http://schemas.android.com/apk/res-auto"
  4.    xmlns:tools="http://schemas.android.com/tools"
  5.    android:layout_width="match_parent"
  6.    android:layout_height="match_parent"
  7.    android:weightSum="2"
  8.    android:gravity="center"
  9.    android:orientation="vertical"
  10.    tools:context=".MainActivity">
  11.  
  12.     <fragment
  13.        android:id="@+id/f"
  14.        android:name="com.example.rhkdg.myapplication.ColorSelect"
  15.        android:layout_width="match_parent"
  16.        android:layout_height="0dp"
  17.        android:layout_weight="1"
  18.        />
  19.     <FrameLayout
  20.        android:id="@+id/fl"
  21.        android:layout_width="match_parent"
  22.        android:layout_height="0dp"
  23.        android:layout_weight="1"
  24.    />
  25. </LinearLayout>

2. color_select_layout.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:orientation="vertical" android:layout_width="match_parent"
  4.    android:layout_height="match_parent"
  5.    android:weightSum="3">
  6.     <View
  7.        android:id="@+id/v_red"
  8.        android:layout_weight="1"
  9.        android:background="#ff0000"
  10.        android:layout_width="match_parent"
  11.        android:layout_height="0dp"/>
  12.     <View
  13.        android:id="@+id/v_blue"
  14.        android:layout_weight="1"
  15.        android:background="#0000ff"
  16.        android:layout_width="match_parent"
  17.        android:layout_height="0dp"/>
  18.     <View
  19.        android:id="@+id/v_green"
  20.        android:layout_weight="1"
  21.        android:background="#00ff00"
  22.        android:layout_width="match_parent"
  23.        android:layout_height="0dp"/>
  24. </LinearLayout>

3. color_view_layout.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:layout_width="match_parent"
  4.    android:layout_height="match_parent"
  5.    android:gravity="center"
  6.    android:orientation="vertical"
  7.    android:weightSum="3"
  8.    xmlns:app="http://schemas.android.com/apk/res-auto">
  9.     <View
  10.        android:id="@+id/v"
  11.        android:layout_width="match_parent"
  12.        android:layout_height="match_parent"
  13.        android:background="#ff0000"
  14.        />
  15. </LinearLayout>


4. MainActivity.java : ColorSelect의 색상을 클릭하면, FrameLayout-> ColorView를 지정해줌.
  1. package com.example.rhkdg.myapplication;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v4.app.Fragment;
  5. import android.support.v7.app.AppCompatActivity;
  6.  
  7. public class MainActivity extends AppCompatActivity implements OnColorClickListener{
  8.  
  9.     ColorView colorView;
  10.     public void onCreate(Bundle saveInstanceState){
  11.         super.onCreate(saveInstanceState);
  12.         setContentView(R.layout.activity_main);
  13.         colorView = new ColorView();
  14.  
  15.         getSupportFragmentManager().beginTransaction().add(R.id.fl, colorView).commit();
  16.     }
  17.  
  18.     public void onColorClick(int color){
  19.         colorView.setChangeBackground(color);
  20.     }
  21.  
  22. }


5. ColorSelect.java : 색을 선택할 수 있게 지정해준다.(클릭)
  1. package com.example.rhkdg.myapplication;
  2.  
  3. import android.content.Context;
  4. import android.graphics.Color;
  5. import android.os.Bundle;
  6. import android.support.v4.app.Fragment;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10.  
  11. interface OnColorClickListener{
  12.     public void onColorClick(int color);
  13. }
  14. public class ColorSelect extends Fragment implements View.OnClickListener{
  15.  
  16.     OnColorClickListener onColorClickListener;
  17.  
  18.     public void onAttach(Context context){
  19.         super.onAttach(context);
  20.         onColorClickListener = (OnColorClickListener) context;
  21.     }
  22.  
  23.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
  24.  
  25.         View v = inflater.inflate(R.layout.color_select_layoutnull);
  26.  
  27.         v.findViewById(R.id.v_red).setOnClickListener(this);
  28.         v.findViewById(R.id.v_green).setOnClickListener(this);
  29.         v.findViewById(R.id.v_blue).setOnClickListener(this);
  30.  
  31.         return v;
  32.     }
  33.     public void onClick(View v){
  34.         int color = 0;
  35.         switch(v.getId()){
  36.             case R.id.v_red:
  37.                 color = Color.RED;
  38.                 break;
  39.             case R.id.v_blue:
  40.                 color = Color.BLUE;
  41.                 break;
  42.             case R.id.v_green:
  43.                 color = Color.GREEN;
  44.                 break;
  45.         }
  46.         onColorClickListener.onColorClick(color);
  47.     }
  48. }


6. ColorView.java : ColorSelect에 의해서 선택된 색을 보여준다.
  1. package com.example.rhkdg.myapplication;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v4.app.Fragment;
  5. import android.support.v4.app.FragmentPagerAdapter;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9.  
  10. public class ColorView extends Fragment{
  11.     View v;
  12.     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){
  13.         v = inflater.inflate(R.layout.color_view_layoutnull);
  14.         return v;
  15.     }
  16.  
  17.     public void setChangeBackground(int color){
  18.         v.findViewById(R.id.v).setBackgroundColor(color);
  19.     }
  20. }


▶ 실행결과

- 초기화면


















- BLUE색상 클릭

















- GREEN색상 클릭

















- RED색상 클릭

댓글 없음:

댓글 쓰기

[Java] N-I/O(Non-Blocking) 파일 읽기 쓰기 - GatheringByteChannel, ScatteringByteChannel, ByteBuffer 사용.

우리는 지금까지 다음과 같이 살펴보았다. 1.  InputStream / OutputStream : 입, 출력 스트림을 바이트로 처리하여 읽기, 쓰기. 2.  FileInputStream / FileOutputStream : 입, 출력 스트림을 ...