모바일/android

[안드로이드프로그래밍6판] 6장 직접 풀어보기 6-2, 직접 풀어보기 6-3, 실습 6-2 / 뷰플리퍼, 탭호스트

hatch 2021. 10. 18. 00:24
728x90
반응형

* xml코드는 비교적 간단해서 접은글로 숨겨 가독성을 높여봤습니다.

 

직접 풀어보기 6-2(뷰플리퍼)

 

<xml 코드>

더보기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
android:layout_weight="15"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<Button
android:id="@+id/btnStart"
android:layout_weight="1"
android:text="사진보기 시작"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<Button
android:id="@+id/btnStop"
android:layout_weight="1"
android:text="사진보기 정지"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/pie"/>

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/q10"/>

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/r11"/>

</ViewFlipper>

</LinearLayout>

<java 코드>

package com.cookandroid.myself6_2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.MultiAutoCompleteTextView;
import android.widget.ViewFlipper;

public class MainActivity extends AppCompatActivity {

    Button btnstart, btnstop;
    ViewFlipper vFlipper;
    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnstart = findViewById(R.id.btnStart);
        btnstop = findViewById(R.id.btnStop);
        vFlipper = findViewById(R.id.viewFlipper);
        vFlipper.setFlipInterval(1000); //1초. (밀리 sec, 밀리 초 단위).

        btnstart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vFlipper.startFlipping();
            }
        });
        btnstop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                vFlipper.stopFlipping();
            }
        });

    }
}

 

 

직접 풀어보기 6-3
AVD 화면

<xml 코드> - 코드 연결이 중요해서 넣음.

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/tabHost">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout
            android:layout_weight="1"
            android:id="@android:id/tabcontent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageView
                android:id="@+id/dog"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/dog"/>
            <ImageView
                android:id="@+id/cat"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/cat"/>
            <ImageView
                android:id="@+id/rabbit"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/rabbit"/>
            <ImageView
                android:id="@+id/shrek"
                android:layout_gravity="center"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/shrek"/>
        </FrameLayout>
        <TabWidget
            android:id="@android:id/tabs"
            android:background="#FFEB3B"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</TabHost>

<java 코드>

package com.cookandroid.myself6_3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TabHost;

public class MainActivity extends AppCompatActivity {

    TabHost tabHost;
    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tabHost = findViewById(R.id.tabHost);
        tabHost.setup();

        TabHost.TabSpec tabSpecDog = tabHost.newTabSpec("Dog").setIndicator("강아지");
        tabSpecDog.setContent(R.id.dog);
        tabHost.addTab(tabSpecDog);

        TabHost.TabSpec tabSpecCat = tabHost.newTabSpec("Cat").setIndicator("고양이");
        tabSpecCat.setContent(R.id.cat);
        tabHost.addTab(tabSpecCat);

        TabHost.TabSpec tabSpecRabbit = tabHost.newTabSpec("Rabbit").setIndicator("토끼");
        tabSpecRabbit.setContent(R.id.rabbit);
        tabHost.addTab(tabSpecRabbit);

        TabHost.TabSpec tabSpecShrek = tabHost.newTabSpec("Shrek").setIndicator("슈렉");
        tabSpecShrek.setContent(R.id.shrek);
        tabHost.addTab(tabSpecShrek);

    }
}

▶ 복습 개념

- (xml) 구성 : 탭 호스트 - 리니어 - 탭 위젯 - 프레임 레이아웃
- (java) 탭 호스트 - 탭 스펙 !!
- 탭 위젯, 프레임레이아웃 : 지정 id(@android:id/tabs, tabcontent)

탭호스트는 일반도 가능. 이 경우, ID 찾고 (변수명).setup(); 해주어야 함.

 

 

실습 6-2(웹 뷰, webView)
AVD 화면

<xml 코드>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <EditText
            android:id="@+id/SiteName"
            android:layout_weight="1"
            android:layout_width="200dp"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/BtnGo"
            android:layout_weight="1"
            android:text="이동"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:id="@+id/BtnBack"
            android:layout_weight="1"
            android:text="이전"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    <WebView
        android:id="@+id/Web"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"/>
</LinearLayout>

<java 코드>

package com.cookandroid.practice6_2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText siteName;
    Button btnGo, btnBack;
    WebView web;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("간단 웹브라우저");

        siteName = findViewById(R.id.SiteName);
        btnBack = findViewById(R.id.BtnBack);
        btnGo = findViewById(R.id.BtnGo);
        web = findViewById(R.id.Web);

        web.setWebViewClient(new CookWebViewClient());

        WebSettings webSet = web.getSettings();
        webSet.setBuiltInZoomControls(true);

        btnGo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                web.loadUrl(siteName.getText().toString());
            }
        });
        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                web.goBack();
            }
        });
    }
    class CookWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
}

▶ 복습 개념

-  (app) - (manifests) - (AndroidManifest.xml)

아이콘 변경 등 가능. 웹 뷰 활용해 인터넷 되게 하려면 다음 문구 삽입 필수.

<uses-permission android:name="android.permission.INTERNET"/>

>> 인터넷 허용해준다는 말.