├── README.md ├── app ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── baobomb │ │ └── popuplistview │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── baobomb │ │ └── popuplistview │ │ ├── DemoActivity.java │ │ ├── PopupListAdapter.java │ │ ├── PopupListView.java │ │ └── PopupView.java │ └── res │ ├── drawable │ └── popup_view_item_bg.xml │ ├── layout │ ├── activity_demo.xml │ ├── extend_view.xml │ └── popup_view_item.xml │ ├── menu │ └── menu_demo.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── example.gif ├── gradle.properties └── settings.gradle /README.md: -------------------------------------------------------------------------------- 1 | # PopupListView 2 | An android powerful listview,which item in listview can be click and popup show inner view under item view! 3 | 4 | Example 5 | --------- 6 | 7 | 8 | ![Image text](https://github.com/s8871404/PopupListView/blob/master/example.gif) 9 | 10 | Demo on Google play 11 | --------- 12 | You can try it out here [Google Play](https://play.google.com/store/apps/details?id=com.baobomb.popuplistview_sample) 13 | 14 | Compile library in Android Studio 15 | --------- 16 | In your build.gradle add the following code 17 | 18 | dependencies { 19 | compile 'com.github.s8871404:PopupListView:1.0.1@aar' 20 | } 21 | 22 | How to use 23 | ---------- 24 | 25 | To use the PopupListView, you need add following code in your main layout xml: 26 | 27 | 31 | 32 | 33 | And you need a layout for listView item design by yourself, 34 | then a layout design by your self as the extend view which show after click list item 35 | 36 | Set list in code 37 | -------------- 38 | After set PopupListView at main layout and design two layout, one for list item another for inner view 39 | now it can be set in code and use it amazing! 40 | To set it: 41 | 42 | It's need an arrayList to collect PopupView,the custom list item object by library 43 | 44 | ArrayList popupViews = new ArrayList<>; 45 | 46 | Then collect all the popupviews design by yourself 47 | 48 | PopupView popupView = new PopupView(this, R.layout.popup_view_item) { 49 | @Override 50 | //Set list item's element in here 51 | public void setViewsElements(View view) { 52 | TextView textView = (TextView) view.findViewById(R.id.title); 53 | textView.setText("Popup View " + String.valueOf(p)); 54 | } 55 | @Override 56 | //Set extendView's element in here 57 | public View setExtendView(View view) { 58 | View extendView; 59 | if (view == null) { 60 | extendView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.extend_view, null); 61 | TextView innerText = (TextView) extendView.findViewById(R.id.innerText); 62 | innerText.setText("Inner View " + String.valueOf(p)); 63 | }else { 64 | extendView = view; 65 | } 66 | return extendView; 67 | } 68 | }; 69 | popupViews.add(popupView); 70 | 71 | After you collect all the popup list item then set it to the PopupListView 72 | 73 | PopupListView popupListView = (PopupListView) findViewById(R.id.popupListView); 74 | 75 | if you want to custom the listview's parent layout you can init it and set the custom view layout res id to it 76 | or just set it null then it will use the default layout, 77 | 78 | //isWithActionBar : default = false , if your app have an actionBar, set it true; 79 | //isWithStatusBar : default = true , if your app is set as full screen and status bar dismiss, set it false. 80 | popupListView.init(View customListBackground,Boolean isWithActionBar,Boolean isWithStatusBar); 81 | popupListView.setItemViews(popupViews); 82 | 83 | Then you can use it amazing!! 84 | 85 | Control it 86 | ----------- 87 | If you just click the item and it already extend 88 | When you want to minify it call following code 89 | 90 | if(popupListView.isZoomIn()){ 91 | popupListView.zoomOut(); 92 | } 93 | 94 | 95 | Make it powerful 96 | --------------- 97 | 98 | If it need to minify when user click back button 99 | just add the following code at your activity 100 | 101 | @Override 102 | public void onBackPressed() { 103 | if (popupListView.isItemZoomIn()) { 104 | popupListView.zoomOut(); 105 | } else { 106 | super.onBackPressed(); 107 | } 108 | } 109 | 110 | License 111 | ------------ 112 | A subclass of the Android ListView component that enables item click to extend. 113 | 114 | Copyright 2015 CHEN WEI-LUNG 115 | 116 | Licensed under the Apache License, Version 2.0 (the "License"); 117 | you may not use this file except in compliance with the License. 118 | You may obtain a copy of the License at 119 | 120 | http://www.apache.org/licenses/LICENSE-2.0 121 | 122 | Unless required by applicable law or agreed to in writing, software 123 | distributed under the License is distributed on an "AS IS" BASIS, 124 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125 | See the License for the specific language governing permissions and 126 | limitations under the License. 127 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 23 5 | buildToolsVersion "23.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.baobomb.popuplistview" 9 | minSdkVersion 16 10 | targetSdkVersion 23 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | } 25 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/Baobomb/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/baobomb/popuplistview/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.baobomb.popuplistview; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/baobomb/popuplistview/DemoActivity.java: -------------------------------------------------------------------------------- 1 | package com.baobomb.popuplistview; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.view.LayoutInflater; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import java.util.ArrayList; 10 | 11 | 12 | public class DemoActivity extends Activity { 13 | 14 | PopupListView popupListView; 15 | ArrayList popupViews; 16 | int actionBarHeight; 17 | int p = 0; 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_demo); 23 | popupViews = new ArrayList<>(); 24 | popupListView = (PopupListView) findViewById(R.id.popupListView); 25 | for (int i = 0; i < 10; i++) { 26 | p = i; 27 | PopupView popupView = new PopupView(this, R.layout.popup_view_item) { 28 | @Override 29 | public void setViewsElements(View view) { 30 | TextView textView = (TextView) view.findViewById(R.id.title); 31 | textView.setText("Popup View " + String.valueOf(p)); 32 | } 33 | 34 | @Override 35 | public View setExtendView(View view) { 36 | View extendView; 37 | if (view == null) { 38 | extendView = LayoutInflater.from(getApplicationContext()).inflate(R 39 | .layout.extend_view, null); 40 | TextView innerText = (TextView) extendView.findViewById(R.id.innerText); 41 | innerText.setText("Inner View " + String.valueOf(p)); 42 | } else { 43 | extendView = view; 44 | } 45 | return extendView; 46 | } 47 | }; 48 | popupViews.add(popupView); 49 | } 50 | popupListView.init(null); 51 | popupListView.setItemViews(popupViews); 52 | } 53 | 54 | @Override 55 | public void onBackPressed() { 56 | if (popupListView.isItemZoomIn()) { 57 | popupListView.zoomOut(); 58 | } else { 59 | super.onBackPressed(); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/baobomb/popuplistview/PopupListAdapter.java: -------------------------------------------------------------------------------- 1 | package com.baobomb.popuplistview; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | import android.widget.BaseAdapter; 6 | 7 | import java.util.ArrayList; 8 | 9 | /** 10 | * Created by Baobomb on 2015/9/25. 11 | */ 12 | public class PopupListAdapter extends BaseAdapter { 13 | ArrayList items = new ArrayList<>(); 14 | 15 | @Override 16 | public int getCount() { 17 | return items.size(); 18 | } 19 | 20 | @Override 21 | public Object getItem(int i) { 22 | return items.get(i); 23 | } 24 | 25 | @Override 26 | public long getItemId(int i) { 27 | return i; 28 | } 29 | 30 | @Override 31 | public View getView(int i, View view, ViewGroup viewGroup) { 32 | view = items.get(i).getPopupView(); 33 | return view; 34 | } 35 | 36 | public void setItems(ArrayList items) { 37 | this.items = items; 38 | notifyDataSetChanged(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/baobomb/popuplistview/PopupListView.java: -------------------------------------------------------------------------------- 1 | package com.baobomb.popuplistview; 2 | 3 | import android.content.Context; 4 | import android.os.Handler; 5 | import android.util.AttributeSet; 6 | import android.util.TypedValue; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.AdapterView; 10 | import android.widget.LinearLayout; 11 | import android.widget.ListView; 12 | import android.widget.RelativeLayout; 13 | 14 | import java.util.ArrayList; 15 | 16 | /** 17 | * Created by Baobomb on 2015/9/25. 18 | */ 19 | public class PopupListView extends RelativeLayout { 20 | Context context; 21 | ListView listView; 22 | LinearLayout extendView; 23 | PopupListAdapter popupListAdapter; 24 | View extendPopupView; 25 | View extendInnerView; 26 | Handler handler = new Handler(); 27 | int startY; 28 | int moveY = 0; 29 | int heightSpace = 0; 30 | int innerViewAlphaVal = 0; 31 | int listViewAlphaVal = 10; 32 | 33 | public PopupListView(Context context, AttributeSet attributeSet) { 34 | super(context, attributeSet); 35 | this.context = context; 36 | popupListAdapter = new PopupListAdapter(); 37 | } 38 | 39 | public void init(ListView customListView) { 40 | setHeightSpace(); 41 | RelativeLayout.LayoutParams listParams = new RelativeLayout.LayoutParams(ViewGroup 42 | .LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 43 | LinearLayout.LayoutParams extendsParams = new LinearLayout.LayoutParams(ViewGroup 44 | .LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 45 | if (customListView == null) { 46 | listView = new ListView(context); 47 | } else { 48 | listView = customListView; 49 | } 50 | 51 | if (extendView == null) { 52 | extendView = new LinearLayout(context); 53 | extendView.setOrientation(LinearLayout.VERTICAL); 54 | } 55 | listView.setDivider(null); 56 | listView.setLayoutParams(listParams); 57 | listView.setAdapter(popupListAdapter); 58 | listView.setOnItemClickListener(extend); 59 | extendView.setLayoutParams(extendsParams); 60 | extendView.setVisibility(GONE); 61 | this.addView(listView); 62 | this.addView(extendView); 63 | } 64 | 65 | public void setItemViews(ArrayList items) { 66 | popupListAdapter.setItems(items); 67 | } 68 | 69 | private AdapterView.OnItemClickListener extend = new AdapterView.OnItemClickListener() { 70 | @Override 71 | public void onItemClick(AdapterView adapterView, View view, int i, long l) { 72 | //TODO GET POSITION AND START ANIMATION 73 | int[] p = new int[2]; 74 | view.getLocationOnScreen(p); 75 | startY = p[1] - heightSpace; 76 | moveY = startY; 77 | zoomIn(i, startY); 78 | } 79 | }; 80 | 81 | public void zoomIn(int i, int startY) { 82 | listView.setVisibility(GONE); 83 | if (extendPopupView != null) { 84 | extendPopupView = null; 85 | } 86 | extendPopupView = ((PopupView) popupListAdapter.getItem(i)).getExtendPopupView(); 87 | extendInnerView = ((PopupView) popupListAdapter.getItem(i)).getExtendView(); 88 | extendView.addView(extendPopupView); 89 | extendPopupView.setY(startY); 90 | extendInnerView.setVisibility(GONE); 91 | extendView.addView(extendInnerView); 92 | extendView.setVisibility(VISIBLE); 93 | handler.postDelayed(zoomInRunnable, 100); 94 | } 95 | 96 | public void zoomOut() { 97 | handler.removeCallbacks(zoomInRunnable); 98 | handler.postDelayed(zoomOutRunnable, 1); 99 | } 100 | 101 | public boolean isItemZoomIn() { 102 | if (extendView.getVisibility() == VISIBLE) { 103 | return true; 104 | } else { 105 | return false; 106 | } 107 | } 108 | 109 | public Runnable zoomInRunnable = new Runnable() { 110 | @Override 111 | public void run() { 112 | if (listViewAlphaVal >= 0) { 113 | listView.setAlpha(listViewAlphaVal * 0.1f); 114 | listViewAlphaVal--; 115 | handler.postDelayed(zoomInRunnable, 10); 116 | } else { 117 | if (listView.getVisibility() != GONE) { 118 | listView.setVisibility(GONE); 119 | } 120 | if (moveY > 0) { 121 | moveY -= startY / 10; 122 | extendPopupView.setY(moveY); 123 | handler.postDelayed(zoomInRunnable, 10); 124 | } else { 125 | extendPopupView.setY(0); 126 | if (innerViewAlphaVal < 10) { 127 | extendInnerView.setAlpha(innerViewAlphaVal * 0.1f); 128 | extendInnerView.setVisibility(VISIBLE); 129 | innerViewAlphaVal++; 130 | handler.postDelayed(zoomInRunnable, 10); 131 | } 132 | } 133 | } 134 | } 135 | }; 136 | 137 | public Runnable zoomOutRunnable = new Runnable() { 138 | @Override 139 | public void run() { 140 | 141 | if (innerViewAlphaVal > 0) { 142 | extendInnerView.setAlpha(innerViewAlphaVal * 0.1f); 143 | innerViewAlphaVal--; 144 | handler.postDelayed(zoomOutRunnable, 1); 145 | } else { 146 | if (extendInnerView.getVisibility() != GONE) { 147 | extendInnerView.setVisibility(GONE); 148 | } 149 | if (moveY < startY) { 150 | moveY += (startY) / 10; 151 | extendPopupView.setY(moveY); 152 | handler.postDelayed(zoomOutRunnable, 10); 153 | } else { 154 | if (listViewAlphaVal < 10) { 155 | listViewAlphaVal++; 156 | if (listView.getVisibility() == GONE) { 157 | listView.setVisibility(VISIBLE); 158 | } 159 | listView.setAlpha(listViewAlphaVal * 0.1f); 160 | handler.postDelayed(zoomOutRunnable, 10); 161 | } else { 162 | if (extendPopupView != null) { 163 | extendPopupView.setY(startY); 164 | extendView.setVisibility(GONE); 165 | extendView.removeAllViews(); 166 | extendPopupView = null; 167 | } 168 | } 169 | } 170 | } 171 | 172 | 173 | } 174 | }; 175 | 176 | public void setHeightSpace() { 177 | int actionBarHeight = 0; 178 | TypedValue tv = new TypedValue(); 179 | if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) { 180 | actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources() 181 | .getDisplayMetrics()); 182 | } 183 | 184 | int result = 0; 185 | int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 186 | if (resourceId > 0) { 187 | result = getResources().getDimensionPixelSize(resourceId); 188 | } 189 | this.heightSpace = actionBarHeight + result; 190 | } 191 | } 192 | -------------------------------------------------------------------------------- /app/src/main/java/com/baobomb/popuplistview/PopupView.java: -------------------------------------------------------------------------------- 1 | package com.baobomb.popuplistview; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | /** 9 | * Created by Baobomb on 2015/9/25. 10 | */ 11 | public abstract class PopupView { 12 | Context context; 13 | LayoutInflater layoutInflater; 14 | int resId; 15 | View view; 16 | View extendPopupView; 17 | View extendView; 18 | 19 | public PopupView(Context context, int resId) { 20 | layoutInflater = LayoutInflater.from(context); 21 | this.resId = resId; 22 | view = layoutInflater.inflate(resId, null); 23 | extendPopupView = layoutInflater.inflate(resId,null); 24 | setViewsElements(view); 25 | setViewsElements(extendPopupView); 26 | ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams 27 | .MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 28 | extendView = setExtendView(extendView); 29 | extendView.setLayoutParams(layoutParams); 30 | } 31 | 32 | public View getPopupView() { 33 | return view; 34 | } 35 | 36 | public View getExtendPopupView() { 37 | return extendPopupView; 38 | } 39 | 40 | public View getExtendView() { 41 | return extendView; 42 | } 43 | 44 | public abstract void setViewsElements(View view); 45 | 46 | public abstract View setExtendView(View view); 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/popup_view_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_demo.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/extend_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/popup_view_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_demo.xml: -------------------------------------------------------------------------------- 1 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcusCwl/PopupListView/ee22d3c73586269b3a9cfed34041650e9b112f15/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcusCwl/PopupListView/ee22d3c73586269b3a9cfed34041650e9b112f15/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcusCwl/PopupListView/ee22d3c73586269b3a9cfed34041650e9b112f15/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcusCwl/PopupListView/ee22d3c73586269b3a9cfed34041650e9b112f15/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | PopupListView 3 | 4 | Hello world! 5 | Settings 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.2.3' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | jcenter() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MarcusCwl/PopupListView/ee22d3c73586269b3a9cfed34041650e9b112f15/example.gif -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------