VLC for Android 메인 화면 분석
소개
VLC for Android 메인 화면을 분석합니다. 골은 메인 화면에서 등장하는 클래스의 씻어 내기와 관련성의 묵직한 파악.
다양한 링크
앱
GitHub
공식 사이트
MainActivity 스크린샷

메인 화면이 표현하는 클래스
앱
GitHub
공식 사이트
MainActivity 스크린샷

메인 화면이 표현하는 클래스
MainActivity 레이아웃 구성
<androidx.coordinatorlayout.widget.CoordinatorLayout 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/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
// 上のツールバー
<include
layout="@layout/toolbar"
...
android:nextFocusForward="@+id/ml_menu_search" />
// フラグメントを入れる所(ビデオ、プレイリスト、アルバム、ブラウズ)
<androidx.fragment.app.FragmentContainerView
...
tools:targetApi="o" />
// 進捗バー?
<androidx.appcompat.widget.ViewStubCompat
...
android:layout="@layout/scan_progress" />
<include layout="@layout/audioplayercontainer" />
// シャッフルボタン
<com.google.android.material.floatingactionbutton.FloatingActionButton
...
app:rippleColor="@color/orange50" />
// 下タブ
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:menu="@menu/bottom_navigation" />
<androidx.appcompat.widget.ViewStubCompat
...
android:layout_width="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
MainActivity 해설
상속 주위
↓. 탭 바 관계의 처리는 Navigator 클래스에 위양하고 있다. 그 덕분에 클래스의 행수는 170스텝 정도에 들어가 있는 모양.
class MainActivity : ContentActivity(),
ExtensionManagerService.ExtensionManagerActivity,
INavigator by Navigator()
{
ContentActivity 주위가 신경이 쓰이므로 조사해 보면 이하의 계승 구조가 되어 있는 모양.

어째서 이런 계층이 되어 있는지는 신경이 쓰이지만 이번은 할애. AudioPlayerContainerActivity는 재생 주변의 무언가를 공통화하는 것처럼 보이지만.
인스턴스 변수
아래의 3개만. 라이브러리 갱신 관계의 제어를 실시하고 있는 모양.
var refreshing: Boolean = false
set(value) {
field = value
}
private lateinit var mediaLibrary: Medialibrary
private var scanNeeded = false
Navigator 정보
상속 관계와 인스턴스 변수는 ↓. 프래그먼트 주위는 여러가지 엉망으로 하고 있지만 자세한 것은 할애. 설계적으로 MainActivity와 순환 참조하고 있는 것이 신경이 쓰이지만.
class Navigator : BottomNavigationView.OnNavigationItemSelectedListener, LifecycleObserver, INavigator {
private val defaultFragmentId= R.id.nav_video
override var currentFragmentId : Int = 0
private var currentFragment: Fragment? = null
private set
private lateinit var activity: MainActivity
private lateinit var settings: SharedPreferences
private var extensionsService: ExtensionManagerService? = null
override lateinit var navigationView: BottomNavigationView
override lateinit var appbarLayout: AppBarLayout
override lateinit var extensionsManager: ExtensionsManager
override var extensionServiceConnection: ServiceConnection? = null
override var extensionManagerService: ExtensionManagerService? = null
private val isExtensionServiceBinded: Boolean
get() = extensionServiceConnection != null
정리
<androidx.coordinatorlayout.widget.CoordinatorLayout 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/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
// 上のツールバー
<include
layout="@layout/toolbar"
...
android:nextFocusForward="@+id/ml_menu_search" />
// フラグメントを入れる所(ビデオ、プレイリスト、アルバム、ブラウズ)
<androidx.fragment.app.FragmentContainerView
...
tools:targetApi="o" />
// 進捗バー?
<androidx.appcompat.widget.ViewStubCompat
...
android:layout="@layout/scan_progress" />
<include layout="@layout/audioplayercontainer" />
// シャッフルボタン
<com.google.android.material.floatingactionbutton.FloatingActionButton
...
app:rippleColor="@color/orange50" />
// 下タブ
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:menu="@menu/bottom_navigation" />
<androidx.appcompat.widget.ViewStubCompat
...
android:layout_width="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
상속 주위
↓. 탭 바 관계의 처리는 Navigator 클래스에 위양하고 있다. 그 덕분에 클래스의 행수는 170스텝 정도에 들어가 있는 모양.
class MainActivity : ContentActivity(),
ExtensionManagerService.ExtensionManagerActivity,
INavigator by Navigator()
{
ContentActivity 주위가 신경이 쓰이므로 조사해 보면 이하의 계승 구조가 되어 있는 모양.

어째서 이런 계층이 되어 있는지는 신경이 쓰이지만 이번은 할애. AudioPlayerContainerActivity는 재생 주변의 무언가를 공통화하는 것처럼 보이지만.
인스턴스 변수
아래의 3개만. 라이브러리 갱신 관계의 제어를 실시하고 있는 모양.
var refreshing: Boolean = false
set(value) {
field = value
}
private lateinit var mediaLibrary: Medialibrary
private var scanNeeded = false
Navigator 정보
상속 관계와 인스턴스 변수는 ↓. 프래그먼트 주위는 여러가지 엉망으로 하고 있지만 자세한 것은 할애. 설계적으로 MainActivity와 순환 참조하고 있는 것이 신경이 쓰이지만.
class Navigator : BottomNavigationView.OnNavigationItemSelectedListener, LifecycleObserver, INavigator {
private val defaultFragmentId= R.id.nav_video
override var currentFragmentId : Int = 0
private var currentFragment: Fragment? = null
private set
private lateinit var activity: MainActivity
private lateinit var settings: SharedPreferences
private var extensionsService: ExtensionManagerService? = null
override lateinit var navigationView: BottomNavigationView
override lateinit var appbarLayout: AppBarLayout
override lateinit var extensionsManager: ExtensionsManager
override var extensionServiceConnection: ServiceConnection? = null
override var extensionManagerService: ExtensionManagerService? = null
private val isExtensionServiceBinded: Boolean
get() = extensionServiceConnection != null
정리
class Navigator : BottomNavigationView.OnNavigationItemSelectedListener, LifecycleObserver, INavigator {
private val defaultFragmentId= R.id.nav_video
override var currentFragmentId : Int = 0
private var currentFragment: Fragment? = null
private set
private lateinit var activity: MainActivity
private lateinit var settings: SharedPreferences
private var extensionsService: ExtensionManagerService? = null
override lateinit var navigationView: BottomNavigationView
override lateinit var appbarLayout: AppBarLayout
override lateinit var extensionsManager: ExtensionsManager
override var extensionServiceConnection: ServiceConnection? = null
override var extensionManagerService: ExtensionManagerService? = null
private val isExtensionServiceBinded: Boolean
get() = extensionServiceConnection != null
Reference
이 문제에 관하여(VLC for Android 메인 화면 분석), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KKKKKAAAAANNNNNMMMMMOOOOO/items/9b346fc80f021ab23c33텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)