Android Studio 5일차
2021. 11. 5. 14:26ㆍAndroid Development
// 액션바와 프레그먼트
메뉴 > Code > Override method … > onCreate 라고 타이핑하고
보여지는 메소드 중에서 Ctrl 키를 눌러서 2개 메소드 선택
package com.example.test10;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity implements
ActionBar.TabListener{
// 액션바에 탭 추가하여 이벤트 걸기.
ActionBar.Tab tabSong, tabArtist, tabAlbum;
MyTabFragment myFrags[] = new MyTabFragment[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
ActionBar bar = getSupportActionBar();// 액션바를 조작하기 위해서 객체
초기화.
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 탭을 이용하는 액션바 형태로 설정.
tabSong = bar.newTab();
tabSong.setText("음악별");
tabSong.setTabListener(this);
bar.addTab(tabSong);
tabArtist = bar.newTab();
tabArtist.setText("가수별");
tabArtist.setTabListener(this);
bar.addTab(tabArtist);
tabAlbum = bar.newTab();
tabAlbum.setText("앨범별");
tabAlbum.setTabListener(this);
bar.addTab(tabAlbum);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// FragmentTransaction : 프레그먼트의 작업 처리.
MyTabFragment myTabFrag = null;
// 프레그먼트를 상속 받아서 새롭게 구현한 프레그먼트.
if (myFrags[tab.getPosition()] == null) {
// 선택한 탭이 널이라면,
// 새롭게 프레그 먼트를 생성하고, 각 값을 할당하여 만들어 줌.
myTabFrag = new MyTabFragment();
Bundle data = new Bundle();
data.putString("tabName", tab.getText().toString());
myTabFrag.setArguments(data);
myFrags[tab.getPosition()] = myTabFrag;
} else
myTabFrag = myFrags[tab.getPosition()];
ft.replace(android.R.id.content, myTabFrag);
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
{
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
{
}
// 내부 클래스, 클래스 안에 클래스, 바깥쪽 클래스와 밀접한 관계시 생성.
// 액티비티는 책장, 프레그먼트는 책장에 붙이는 포스트잇.
public static class MyTabFragment extends
androidx.fragment.app.Fragment {
String tabName;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle data = getArguments();
// onCreate 메소드의 전달 값으로 Bundle 객체 전달.
// Bundle 객체에는 여러가지 정보가 전달 되는데, 그중 하나가 탭의 이름.
tabName = data.getString("tabName");
// 전달된 번들 객체에서 탭네임을 가져와서 문자열 변수 초기화.
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater
, @Nullable ViewGroup container, @Nullable Bundle
savedInstanceState) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
LinearLayout baseLayout = new LinearLayout(super.getActivity());
baseLayout.setOrientation(LinearLayout.VERTICAL);
baseLayout.setLayoutParams(params);
if (tabName == "음악별")
baseLayout.setBackgroundColor(Color.RED);
if (tabName == "가수별")
baseLayout.setBackgroundColor(Color.GREEN);
if (tabName == "앨범별")
baseLayout.setBackgroundColor(Color.BLUE);
// 프레그먼트 뷰를 자바 코드로 생성.
// 다른 쪽에서 호출 하면서 addView 처리 예정.
return baseLayout;
}
}
}
xml 사용하지 않고 pragment 활용 예시.
간단 웹브라우저 만들기.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
tools:ignore="SpeakableTextPresentCheck">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<EditText
android:id="@+id/txtUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textUri"
android:minHeight="48dp"
tools:ignore="SpeakableTextPresentCheck" />
<Button
android:id="@+id/btMove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="이동" />
<Button
android:id="@+id/btPrev"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="이전" />
</LinearLayout>
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
package com.example.test10;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
EditText edtUrl;
Button btnGo, btnBack;
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtUrl=findViewById(R.id.txtUrl);
btnGo=findViewById(R.id.btMove);
btnBack=findViewById(R.id.btPrev);
web=findViewById(R.id.web);
web.setWebViewClient(new CookWebViewClient());// 웹뷰에 웹 클라이언트
설정.
WebSettings webSet = web.getSettings();// 웹뷰 설정 객체.
webSet.setBuiltInZoomControls(true);// 빌트인 줌 버튼 허용.
webSet.setJavaScriptEnabled(true);// 자바스크립트 허용.
btnGo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.loadUrl(edtUrl.getText().toString());// 입력된 url 로 웹뷰
이동.
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
web.goBack();// 이전 페이지로 돌아가기.
}
});
}
class CookWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
}
}
자바코드
<uses-permission android:name="android.permission.INTERNET" />
androidMenifest.xml 에 위 코드 추가해야 인터넷 사용 가능.
메뉴 설정.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/itemRed"
android:title="배경색 (빨강)"></item>
<item
android:id="@+id/itemGreen"
android:title="배경색(초록)">
</item>
<item
android:id="@+id/itemBlue"
android:title="배경색(파랑)">
</item>
<item android:title="버튼 변경 >> ">
<menu>
<item
android:id="@+id/subRotate"
android:title="버튼 45 도 회전"/>
<item
android:id="@+id/subSize"
android:title="버튼 2 배 확대"/>
</menu>
</item>
</menu>
public class MainActivity extends AppCompatActivity {
LinearLayout baseLayout;
Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
baseLayout = findViewById(R.id.ll);
bt = findViewById(R.id.button3);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// 옵션 메뉴 만들기
super.onCreateOptionsMenu(menu);
MenuInflater mInflater = getMenuInflater();
// 메뉴를 보여주는 역할.
mInflater.inflate(R.menu.menu_1, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
// 옵션 메뉴 선택시 동작.
switch (item.getItemId()) {
case R.id.itemRed:
baseLayout.setBackgroundColor(Color.RED);
return true;
case R.id.itemGreen:
baseLayout.setBackgroundColor(Color.GREEN);
return true;
case R.id.itemBlue:
baseLayout.setBackgroundColor(Color.BLUE);
return true;
case R.id.subRotate:
bt.setRotation(45);
return true;
case R.id.subSize:
bt.setScaleX(2);
return true;
}
return false;
}
}
메뉴 설정 자바코드.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
tools:ignore="SpeakableTextPresentCheck">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
'Android Development' 카테고리의 다른 글
Android Studio 7일차 (0) | 2021.11.09 |
---|---|
Android Studio 6일차 (0) | 2021.11.08 |
Android Studio 4일차 (0) | 2021.11.05 |
Android Studio 3일차 (0) | 2021.11.03 |
Android Studio 1,2일차 (0) | 2021.11.01 |