728x90
반응형
1. AndroidManifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.internetlessonplayer">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.InternetLessonPlayer"
android:screenOrientation="portrait">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
|
cs |
2. build.gradle (:app)
1
2
3
4
5
|
...
dependencies {
implementation 'gun0912.ted:tedpermission:2.0.0'
...
}
|
cs |
3. item.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?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="wrap_content"
android:orientation="vertical"
android:id="@+id/item">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이름"
android:textColor="@color/black"
android:textSize="25sp"
android:id="@+id/tv_name"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_tag"
android:textSize="17sp"
android:text="범주"/>
</LinearLayout>
|
cs |
4. bottom_menu.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item_home"
android:enabled="true"
android:icon="@drawable/ic_baseline_home_24"
android:title="home"/>
<item
android:id="@+id/item_homePage"
android:enabled="true"
android:icon="@drawable/ic_baseline_open_in_browser_24"
android:title="page"/>
<item
android:id="@+id/item_add"
android:enabled="true"
android:icon="@drawable/ic_baseline_add_box_24"
android:title="add"/>
<item
android:id="@+id/item_setting"
android:enabled="true"
android:icon="@drawable/ic_baseline_settings_24"
android:title="setting"/>
</menu>
|
cs |
5. activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?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"
tools:context=".MainActivity"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/fl_main"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bn_main"
app:itemIconTint="#000000"
app:itemTextColor="#000000"
app:menu="@menu/bottom_menu"/>
</LinearLayout>
|
cs |
6. fragment_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?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">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scrollbarSize="5dp"
android:scrollbarFadeDuration="0"
android:scrollbarThumbVertical="@color/black"
android:scrollbars="vertical"
android:visibility="visible"
android:id="@+id/rv">
</androidx.recyclerview.widget.RecyclerView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible"
android:orientation="vertical"
android:id="@+id/player">
<VideoView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/vv"
android:layout_weight="0"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="이름"
android:textSize="20sp"
android:textColor="@color/black"
android:id="@+id/tv_aboutVideo"/>
</LinearLayout>
</FrameLayout>
</LinearLayout>
|
cs |
7. fragment_addpage.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?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">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="동영상 이름"
android:textSize="30dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="ex) 이름"
android:id="@+id/et_name"/>
<TextView
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:textSize="30dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="ex) 범주"
android:id="@+id/et_tag"/>
<TextView
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="동영상 경로"
android:textSize="30dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="file:///~"
android:id="@+id/et_path"/>
<Button
android:layout_marginTop="30dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="동영상 추가"
android:id="@+id/btn_add"/>
</LinearLayout>
|
cs |
8. fragment_setting.xml
1
2
3
4
5
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
9. fragment_browser.xml
1
2
3
4
5
6
7
8
9
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/wv"/>
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
10. MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package com.example.internetlessonplayer;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;
import android.Manifest;
import android.app.ActionBar;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import static com.example.internetlessonplayer.FragmentMain.FILENAME;
import static com.example.internetlessonplayer.FragmentMain.NAMEOFAMOUNT;
public class MainActivity extends AppCompatActivity {
RecyclerView rv;
LinearLayout player;
BottomNavigationView bottomNavigationView;
public static MainActivity mainActivity;
public static FragmentMain fragmentMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainActivity = this;
TedPermission.with(this)
.setPermissionListener(permission)
.setRationaleMessage("강의 재생을 위하여 권한을 허용해주세요")
.setDeniedMessage("권한이 거부되었습니다. 설정 > 권한에서 허용할 수 있습니다.")
.setPermissions(Manifest.permission.READ_EXTERNAL_STORAGE)
.check();
bottomNavigationView = (BottomNavigationView)findViewById(R.id.bn_main);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull @NotNull MenuItem item) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch (item.getItemId()) {
case R.id.item_home:
fragmentMain = new FragmentMain();
ft.replace(R.id.fl_main, fragmentMain);
break;
case R.id.item_homePage:
FragmentBrowser fragmentBrowser = new FragmentBrowser();
ft.replace(R.id.fl_main, fragmentBrowser);
break;
case R.id.item_add:
FragmentAddPage fragmentAddPage = new FragmentAddPage();
ft.replace(R.id.fl_main, fragmentAddPage);
break;
case R.id.item_setting:
FragmentSetting fragmentSetting = new FragmentSetting();
ft.replace(R.id.fl_main, fragmentSetting);
break;
}
ft.commit();
return true;
}
});
}
public void changeStatusOfNavi(int i) {
bottomNavigationView.setVisibility(i);
}
PermissionListener permission = new PermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "권한 허가", Toast.LENGTH_SHORT);
}
@Override
public void onPermissionDenied(ArrayList<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "권한 거부", Toast.LENGTH_SHORT);
}
};
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
rv = FragmentMain.rv;
if ((keyCode == KeyEvent.KEYCODE_BACK) && rv.getVisibility() == View.INVISIBLE) {
player = FragmentMain.player;
rv.setVisibility(View.VISIBLE);
FragmentMain.function_1();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
|
cs |
11. FragmentMain.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
package com.example.internetlessonplayer;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.VideoView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.jetbrains.annotations.NotNull;
import java.io.FileOutputStream;
import java.util.ArrayList;
public class FragmentMain extends Fragment {
public static RecyclerView rv;
private static View view;
public static VideoView vv;
public TextView textView;
public static FragmentMain mContext;
LinearLayoutManager layoutManager;
private ArrayList<MainData> arrayList;
Adapter adapter;
public static LinearLayout player;
public static final String FILENAME = "file";
public static final String NAMEOFAMOUNT = "amount";
public static final String FIRSTNAMEOFNAME = "name";
public static final String FIRSTNAMEOFTAG = "tag";
public static final String FIRSTNAMEOFPATH = "path";
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main, container, false);
mContext = this;
arrayList = new ArrayList<>();
adapter = new Adapter(arrayList);
SharedPreferences sharedPreferences = ((MainActivity)MainActivity.mainActivity).getSharedPreferences(FILENAME, 0);
for (int i = 0; i < sharedPreferences.getInt(NAMEOFAMOUNT, 0); i++){
MainData mainData = new MainData(sharedPreferences.getString(FIRSTNAMEOFNAME+i, null), sharedPreferences.getString(FIRSTNAMEOFTAG+i, null), sharedPreferences.getString(FIRSTNAMEOFPATH+i, null));
arrayList.add(mainData);
}
Log.e("FragmentMain", String.valueOf(sharedPreferences.getInt(NAMEOFAMOUNT, 0)));
layoutManager = new LinearLayoutManager(getContext());
textView = (TextView)view.findViewById(R.id.tv_aboutVideo);
rv = view.findViewById(R.id.rv);
rv.setLayoutManager(layoutManager);
rv.setAdapter(adapter);
adapter.notifyDataSetChanged();
rv = (RecyclerView)view.findViewById(R.id.rv);
player = (LinearLayout)view.findViewById(R.id.player);
vv = (VideoView)view.findViewById(R.id.vv);
return view;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public static void function_1() {
RecyclerView rv;
LinearLayout player;
rv = (RecyclerView)view.findViewById(R.id.rv);
player = (LinearLayout)view.findViewById(R.id.player);
if (rv.getVisibility() == View.INVISIBLE) {
rv.setVisibility(View.INVISIBLE);
player.setVisibility(View.VISIBLE);
ActionBar actionBar = ((MainActivity)MainActivity.mainActivity).getSupportActionBar();
((MainActivity)MainActivity.mainActivity).changeStatusOfNavi(View.GONE);
actionBar.hide();
((MainActivity)MainActivity.mainActivity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
else if (rv.getVisibility() == View.VISIBLE) {
rv.setVisibility(View.VISIBLE);
player.setVisibility(View.INVISIBLE);
ActionBar actionBar = ((MainActivity)MainActivity.mainActivity).getSupportActionBar();
((MainActivity)MainActivity.mainActivity).changeStatusOfNavi(View.GONE);
actionBar.show();
((MainActivity)MainActivity.mainActivity).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
public void addVideo(String name, String tag, String path) {
MainData mainData = new MainData(name, tag, path);
FragmentMain.this.arrayList.add(mainData);
adapter.notifyDataSetChanged();
SharedPreferences sharedPreferences = ((MainActivity)MainActivity.mainActivity).getSharedPreferences(FILENAME, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString((FIRSTNAMEOFNAME + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), name);
editor.putString((FIRSTNAMEOFTAG + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), tag);
editor.putString((FIRSTNAMEOFPATH + sharedPreferences.getInt(NAMEOFAMOUNT, 0)), path);
editor.putInt(NAMEOFAMOUNT, sharedPreferences.getInt(NAMEOFAMOUNT, 0) + 1);
editor.commit();
}
}
|
cs |
12. MainData.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package com.example.internetlessonplayer;
import android.net.Uri;
public class MainData {
String name;
String tag;
String path;
public MainData(String name, String tag, String path) {
this.name = name;
this.tag = tag;
this.path = path;
}
public String getPath() {
return this.path;
}
public void setUri(String path) {
this.path = path;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getTag() {
return this.tag;
}
public void setTag(String tag) {
this.tag = tag;
}
}
|
cs |
13. Adapter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package com.example.internetlessonplayer;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.MediaController;
import android.widget.TextView;
import android.widget.VideoView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.ActionBar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;
import org.jetbrains.annotations.NotNull;
import java.io.FileOutputStream;
import java.util.ArrayList;
public class Adapter extends RecyclerView.Adapter<Adapter.CustomViewHolder> {
private ArrayList<MainData> arrayList;
private LinearLayout player;
private RecyclerView rv;
private VideoView vv;
public Adapter(ArrayList<MainData> arrayList) {
this.arrayList = arrayList;
}
@Override
public void onAttachedToRecyclerView(@NonNull @NotNull RecyclerView recyclerView) {
rv = recyclerView;
super.onAttachedToRecyclerView(recyclerView);
}
@NonNull
@NotNull
@Override
public CustomViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
CustomViewHolder holder = new CustomViewHolder(view);
return holder;
}
@Override
public int getItemCount() {
return (null != arrayList ? arrayList.size(): 0);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void onBindViewHolder(@NonNull @NotNull Adapter.CustomViewHolder holder, int position) {
holder.tv_name.setText((arrayList.get(position).getName()));
holder.tv_tag.setText((arrayList.get(position).getTag()));
holder.itemView.setTag(position);
holder.tv_name.setOnClickListener(view -> {
((FragmentMain)FragmentMain.mContext).textView.setText(holder.tv_name.getText().toString());
vv = FragmentMain.vv;
MediaController mediaController = new MediaController(view.getContext());
mediaController.setAnchorView(vv);
vv.setMediaController(mediaController);
vv.setVideoURI(Uri.parse(arrayList.get(position).getPath()));
vv.start();
rv.setVisibility(View.INVISIBLE);
FragmentMain.function_1();
});
}
protected class CustomViewHolder extends RecyclerView.ViewHolder {
protected TextView tv_name;
protected TextView tv_tag;
public CustomViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
this.tv_name = (TextView)itemView.findViewById(R.id.tv_name);
this.tv_tag = (TextView)itemView.findViewById(R.id.tv_tag);
}
public TextView getTextViewName() {
return this.tv_name;
}
public TextView getTextViewTag() {
return this.tv_tag;
}
}
}
|
cs |
14. FragmentAddPage.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package com.example.internetlessonplayer;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import static com.example.internetlessonplayer.MainActivity.fragmentMain;
public class FragmentAddPage extends Fragment {
EditText et_name;
EditText et_tag;
EditText et_path;
Button btn_add;
private View view;
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_addpage, container, false);
et_name = (EditText)view.findViewById(R.id.et_name);
et_path = (EditText)view.findViewById(R.id.et_path);
et_tag = (EditText)view.findViewById(R.id.et_tag);
btn_add = (Button)view.findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.fragmentMain.addVideo(et_name.getText().toString(), et_tag.getText().toString(), et_path.getText().toString());
et_name.setText("");
et_path.setText("");
et_tag.setText("");
}
});
return view;
}
}
|
cs |
15. FragmentSetting.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package com.example.internetlessonplayer;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class FragmentSetting extends Fragment {
private View view;
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_setting, container, false);
return view;
}
}
|
cs |
16. FragmentBrowser.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.example.internetlessonplayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class FragmentBrowser extends Fragment {
WebView wv;
private View view;
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_browser, container, false);
wv = view.findViewById(R.id.wv);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl("~~~~~~~~");
wv.setWebChromeClient(new WebChromeClient());
wv.setWebViewClient(new WebViewClient());
return view;
}
}
\
|
cs |
17. gradle.properties
1
|
android.enableJetifier = true
|
cs |
728x90
반응형
'Android App' 카테고리의 다른 글
startActivityForResult, startActivityResult in Android Studio (0) | 2021.09.18 |
---|---|
하단 선택바 (bottomNavigation, Fragment 전환) in Android Studio (0) | 2021.09.17 |
mediaPlayer+surfaceView, 동영상 소형플레이어 기본모드 전환 in Android Studio (0) | 2021.09.04 |
google map api 사용하기 in Android Studio (0) | 2021.09.03 |
더블클릭으로 앱 종료 in Android Studio (0) | 2021.08.31 |