v1.0.1 release
This commit is contained in:
parent
c110c52301
commit
e07cb6909f
@ -2,6 +2,7 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/BuyWhat.iml" filepath="$PROJECT_DIR$/BuyWhat.iml" />
|
||||||
<module fileurl="file://C:\Project\BuyWhatNative\BuyWhat.iml" filepath="C:\Project\BuyWhatNative\BuyWhat.iml" />
|
<module fileurl="file://C:\Project\BuyWhatNative\BuyWhat.iml" filepath="C:\Project\BuyWhatNative\BuyWhat.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/BuyWhatNative.iml" filepath="$PROJECT_DIR$/BuyWhatNative.iml" />
|
<module fileurl="file://$PROJECT_DIR$/BuyWhatNative.iml" filepath="$PROJECT_DIR$/BuyWhatNative.iml" />
|
||||||
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||||
|
@ -11,14 +11,25 @@ android {
|
|||||||
applicationId "xyz.mtfos.buywhat"
|
applicationId "xyz.mtfos.buywhat"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 26
|
targetSdkVersion 26
|
||||||
versionCode 1
|
versionCode 4
|
||||||
versionName "1.0"
|
versionName "1.0.1"
|
||||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
signingConfigs {
|
||||||
|
release {
|
||||||
|
storeFile file("${rootDir}/mtfos")
|
||||||
|
storePassword "pass.ok=1"
|
||||||
|
keyAlias "mtfos"
|
||||||
|
keyPassword "pass.ok=1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||||
|
signingConfig signingConfigs.release
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@drawable/logo"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@drawable/logo"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity android:name=".MainActivity">
|
<activity android:name=".MainActivity">
|
||||||
@ -19,6 +19,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity android:name=".StoreList" />
|
<activity android:name=".StoreList" />
|
||||||
|
<activity android:name=".ItemRandom" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
223
app/src/main/java/xyz/mtfos/buywhat/ItemRandom.kt
Normal file
223
app/src/main/java/xyz/mtfos/buywhat/ItemRandom.kt
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
package xyz.mtfos.buywhat
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Message
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.*
|
||||||
|
import org.json.JSONArray
|
||||||
|
import org.json.JSONObject
|
||||||
|
import xyz.mtfos.tools.apiObject
|
||||||
|
import xyz.mtfos.tools.objectTool.bind
|
||||||
|
import java.util.*
|
||||||
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jay on 2017/7/6.
|
||||||
|
*/
|
||||||
|
class ItemRandom : SampleActivity() {
|
||||||
|
private val tvTitle: TextView by bind(R.id.tvTitle)
|
||||||
|
private val ivRefresh: ImageView by bind(R.id.ivRefresh)
|
||||||
|
private val lvCommodity: ListView by bind(R.id.lvCommodity)
|
||||||
|
private var store_id: Int? = null
|
||||||
|
private var itemList: ArrayList<JSONObject> = ArrayList()
|
||||||
|
private var adapter: lvAdapter? = null
|
||||||
|
private val rangeMin: EditText by bind(R.id.rangeMin)
|
||||||
|
private val rangeMax: EditText by bind(R.id.rangeMax)
|
||||||
|
private val btnRandom: Button by bind(R.id.btnRandom)
|
||||||
|
private val tvResult: TextView by bind(R.id.tvResult)
|
||||||
|
private val ivBack: ImageView by bind(R.id.ivBack)
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
setViewSource(R.layout.activity_item_random)
|
||||||
|
|
||||||
|
tvTitle?.text = intent?.getStringExtra("name")
|
||||||
|
store_id = intent?.getIntExtra("id", 0)
|
||||||
|
|
||||||
|
adapter = lvAdapter(this@ItemRandom, 0)
|
||||||
|
|
||||||
|
lvCommodity.adapter = adapter
|
||||||
|
|
||||||
|
lvCommodity.setOnItemClickListener({parent, view, position, id ->
|
||||||
|
val data: JSONObject = itemList.get(position) as JSONObject
|
||||||
|
var sk:Boolean = data!!["skip"] as Boolean
|
||||||
|
data?.put("skip", !sk)
|
||||||
|
itemList.set(position, data)
|
||||||
|
adapter?.notifyDataSetChanged()
|
||||||
|
|
||||||
|
randomItem()
|
||||||
|
})
|
||||||
|
|
||||||
|
btnRandom.setOnClickListener{v->
|
||||||
|
val json : JSONObject? = randomItem()
|
||||||
|
val str : String = if(json != null) {
|
||||||
|
"Result : ${json!!["name"]} $${json!!["price"]}"
|
||||||
|
}else{
|
||||||
|
"Result : 目標區間無商品"
|
||||||
|
}
|
||||||
|
tvResult.text = str
|
||||||
|
}
|
||||||
|
|
||||||
|
ivRefresh.setOnClickListener({ v ->
|
||||||
|
getList()
|
||||||
|
})
|
||||||
|
|
||||||
|
ivBack.setOnClickListener({ v ->
|
||||||
|
finish()
|
||||||
|
})
|
||||||
|
|
||||||
|
getList()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getList() {
|
||||||
|
if(store_id == 0 || store_id == null) return
|
||||||
|
resetView()
|
||||||
|
toggleLoading(true)
|
||||||
|
api.getItems(store_id!!, object: apiObject.apicb{
|
||||||
|
override fun Callback(json: JSONObject?) {
|
||||||
|
uiHandler.post { toggleLoading(false) }
|
||||||
|
if(json!!["status"] == 1) {
|
||||||
|
val jarr :JSONArray = json!!["record"] as JSONArray
|
||||||
|
itemList.clear()
|
||||||
|
if(jarr.length() > 0) {
|
||||||
|
uiHandler.sendEmptyMessage(3)
|
||||||
|
for(i in 0..(jarr.length() - 1)){
|
||||||
|
val tmp: JSONObject =jarr!![i] as JSONObject
|
||||||
|
tmp.put("skip", false)
|
||||||
|
itemList.add(tmp)
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
uiHandler.sendEmptyMessage(2)
|
||||||
|
}
|
||||||
|
uiHandler.sendEmptyMessage(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun resetView () {
|
||||||
|
rangeMin.setText("0")
|
||||||
|
rangeMax.setText("0")
|
||||||
|
tvResult.text = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
fun randomItem (): JSONObject? {
|
||||||
|
val min: String = rangeMin.text.toString()
|
||||||
|
val max: String = rangeMax.text.toString()
|
||||||
|
|
||||||
|
var imin = if(min.toIntOrNull() == null) 0 else min.toInt()
|
||||||
|
var imax = if(max.toIntOrNull() == null) 0 else max.toInt()
|
||||||
|
|
||||||
|
val tmp: ArrayList<JSONObject> = ArrayList()
|
||||||
|
|
||||||
|
for(i in 0..(itemList.size - 1)){
|
||||||
|
val t:JSONObject = itemList[i]
|
||||||
|
var flag:Boolean = false
|
||||||
|
|
||||||
|
val price:Int = t!!["price"] as Int
|
||||||
|
|
||||||
|
if(t!!["skip"] == false){
|
||||||
|
if(imin == 0 && imax == 0){
|
||||||
|
flag = true
|
||||||
|
}else if(imin > 0 && imax == 0){
|
||||||
|
if(price >= imin){
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
}else if(imin == 0 && imax > 0) {
|
||||||
|
if(price <= imax) {
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(price in imin..imax) {
|
||||||
|
flag = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(flag){
|
||||||
|
tmp.add(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var arr: Array<JSONObject> = tmp.toTypedArray()
|
||||||
|
|
||||||
|
if(arr.isNotEmpty()) {
|
||||||
|
arr = shuffleArray(arr) as Array<JSONObject>
|
||||||
|
}
|
||||||
|
|
||||||
|
return if(arr.isNotEmpty()) {
|
||||||
|
arr[0]
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun shuffleArray(arr: Array<JSONObject>) : Array<JSONObject>{
|
||||||
|
var tmp = arr
|
||||||
|
|
||||||
|
var rand: Random = Random()
|
||||||
|
|
||||||
|
var limit: Int = 0
|
||||||
|
while (limit < 2) {
|
||||||
|
for (i in 0..(tmp.size - 1)) {
|
||||||
|
val pos: Int = rand.nextInt(tmp.size)
|
||||||
|
val a = tmp[pos]
|
||||||
|
tmp[pos] = tmp[i]
|
||||||
|
tmp[i] = a
|
||||||
|
}
|
||||||
|
limit ++
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("HandlerLeak")
|
||||||
|
private val uiHandler = object : Handler() {
|
||||||
|
override fun handleMessage(msg: Message?) {
|
||||||
|
super.handleMessage(msg)
|
||||||
|
when (msg!!.what) {
|
||||||
|
1 -> {
|
||||||
|
// update listview data
|
||||||
|
adapter!!.clear()
|
||||||
|
adapter!!.addAll(itemList)
|
||||||
|
}
|
||||||
|
2 -> {
|
||||||
|
btnRandom.isClickable = false
|
||||||
|
}
|
||||||
|
3 -> {
|
||||||
|
btnRandom.isClickable = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class lvAdapter(context: Context, resource: Int) : ArrayAdapter<JSONObject>(context, resource) {
|
||||||
|
|
||||||
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
|
||||||
|
val data = getItem(position) as JSONObject
|
||||||
|
var v: View = if (convertView == null) {
|
||||||
|
View.inflate(context, R.layout.listview_commodity_item, null)
|
||||||
|
} else {
|
||||||
|
convertView
|
||||||
|
}
|
||||||
|
|
||||||
|
val tvSkip: TextView = v.findViewById<TextView>(R.id.tvSkip)
|
||||||
|
tvSkip.text = if(data!!["skip"] == false){
|
||||||
|
context.getString(R.string.commodity_no_skip)
|
||||||
|
}else{
|
||||||
|
context.getString(R.string.commodity_skip)
|
||||||
|
}
|
||||||
|
|
||||||
|
val tv: TextView = v.findViewById(R.id.tvItem)
|
||||||
|
val name:String = data!!["name"] as String
|
||||||
|
val price:Int = data!!["price"] as Int
|
||||||
|
tv.text = "${name} $${price}"
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
45
app/src/main/java/xyz/mtfos/buywhat/SampleActivity.kt
Normal file
45
app/src/main/java/xyz/mtfos/buywhat/SampleActivity.kt
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package xyz.mtfos.buywhat
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.os.Handler
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import xyz.mtfos.tools.apiObject
|
||||||
|
import xyz.mtfos.tools.objectTool.bind
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by jay on 2017/7/6.
|
||||||
|
*/
|
||||||
|
open class SampleActivity : Activity() {
|
||||||
|
protected val api: apiObject = apiObject(this@SampleActivity)
|
||||||
|
protected val layMain: RelativeLayout by bind(R.id.layMain)
|
||||||
|
protected val layLoading: LinearLayout by bind(R.id.layLoading)
|
||||||
|
|
||||||
|
fun setViewSource(v: View?) {
|
||||||
|
setContentView(v)
|
||||||
|
setDynView()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setViewSource(v: Int) {
|
||||||
|
setContentView(v)
|
||||||
|
setDynView()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setDynView() {
|
||||||
|
val loadingItem: LinearLayout = layoutInflater.inflate(R.layout.lay_loading, null) as LinearLayout
|
||||||
|
|
||||||
|
loadingItem.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
|
||||||
|
|
||||||
|
layLoading?.addView(loadingItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toggleLoading(flag: Boolean) {
|
||||||
|
layLoading?.visibility = if (flag == true) {
|
||||||
|
View.VISIBLE
|
||||||
|
} else {
|
||||||
|
View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package xyz.mtfos.buywhat
|
package xyz.mtfos.buywhat
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@ -18,28 +17,28 @@ import xyz.mtfos.tools.objectTool.bind
|
|||||||
/**
|
/**
|
||||||
* Created by jay on 2017/7/5.
|
* Created by jay on 2017/7/5.
|
||||||
*/
|
*/
|
||||||
class StoreList : Activity() {
|
class StoreList : SampleActivity() {
|
||||||
private val lv: ListView by bind(R.id.storelv)
|
private val lv: ListView by bind(R.id.storelv)
|
||||||
private val tvTitle: TextView by bind(R.id.tvTitle)
|
|
||||||
private val ivRefresh: ImageView by bind(R.id.ivRefresh)
|
private val ivRefresh: ImageView by bind(R.id.ivRefresh)
|
||||||
private val api: apiObject = apiObject(this@StoreList)
|
|
||||||
private var storeList: ArrayList<JSONObject> = ArrayList()
|
private var storeList: ArrayList<JSONObject> = ArrayList()
|
||||||
private var adapter: lvAdapter? = null
|
private var adapter: lvAdapter? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_store_list)
|
setViewSource(R.layout.activity_store_list)
|
||||||
|
|
||||||
adapter = lvAdapter(this@StoreList, 0)
|
adapter = lvAdapter(this@StoreList, 0)
|
||||||
|
|
||||||
lv.adapter = adapter
|
lv.adapter = adapter
|
||||||
|
|
||||||
lv.setOnItemClickListener({parent, view, position, id ->
|
lv.setOnItemClickListener({ parent, view, position, id ->
|
||||||
val data: JSONObject = storeList.get(position) as JSONObject
|
val data: JSONObject = storeList.get(position) as JSONObject
|
||||||
val sid: Int = data!!["id"] as Int
|
val sid: Int = data!!["id"] as Int
|
||||||
|
val name: String = data!!["name"] as String
|
||||||
|
|
||||||
var intent = Intent(this@StoreList, null)
|
val intent = Intent(this@StoreList, ItemRandom::class.java)
|
||||||
intent.putExtra("id", sid)
|
intent.putExtra("id", sid)
|
||||||
|
intent.putExtra("name", name)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -51,13 +50,15 @@ class StoreList : Activity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getList() {
|
fun getList() {
|
||||||
|
toggleLoading(true)
|
||||||
api.getStore(object : apiObject.apicb {
|
api.getStore(object : apiObject.apicb {
|
||||||
override fun Callback(json: JSONObject?) {
|
override fun Callback(json: JSONObject?) {
|
||||||
|
uiHandler.post({ toggleLoading(false) })
|
||||||
if (json!!["status"] == 1) {
|
if (json!!["status"] == 1) {
|
||||||
var jarr: JSONArray = json!!["record"] as JSONArray
|
var jarr: JSONArray = json!!["record"] as JSONArray
|
||||||
if(jarr.length() > 0) {
|
|
||||||
storeList.clear()
|
storeList.clear()
|
||||||
for(i in 0..(jarr.length() - 1)) {
|
if (jarr.length() > 0) {
|
||||||
|
for (i in 0..(jarr.length() - 1)) {
|
||||||
val tmp = jarr.getJSONObject(i)
|
val tmp = jarr.getJSONObject(i)
|
||||||
storeList.add(tmp)
|
storeList.add(tmp)
|
||||||
}
|
}
|
||||||
@ -82,13 +83,13 @@ class StoreList : Activity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class lvAdapter(context: Context, resource: Int): ArrayAdapter<JSONObject>(context, resource) {
|
class lvAdapter(context: Context, resource: Int) : ArrayAdapter<JSONObject>(context, resource) {
|
||||||
|
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
|
||||||
val data = getItem(position) as JSONObject
|
val data = getItem(position) as JSONObject
|
||||||
var v: View = if(convertView == null) {
|
var v: View = if (convertView == null) {
|
||||||
View.inflate(context, R.layout.listview_store_item, null)
|
View.inflate(context, R.layout.listview_store_item, null)
|
||||||
}else {
|
} else {
|
||||||
convertView
|
convertView
|
||||||
}
|
}
|
||||||
val tv: TextView = v.findViewById(R.id.tvItem)
|
val tv: TextView = v.findViewById(R.id.tvItem)
|
||||||
|
@ -37,7 +37,7 @@ open class apiObject constructor(val ctx: Context) {
|
|||||||
|
|
||||||
open fun getItems(storeId: Int, cb: apicb) {
|
open fun getItems(storeId: Int, cb: apicb) {
|
||||||
val url:String = "${projectSet.apiUrl}/item/${storeId}"
|
val url:String = "${projectSet.apiUrl}/item/${storeId}"
|
||||||
var req:Request = Request.Builder()
|
val req:Request = Request.Builder()
|
||||||
.url(url)
|
.url(url)
|
||||||
.build()
|
.build()
|
||||||
send(req, object : apicb {
|
send(req, object : apicb {
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 150 B |
Binary file not shown.
After Width: | Height: | Size: 125 B |
Binary file not shown.
After Width: | Height: | Size: 160 B |
Binary file not shown.
After Width: | Height: | Size: 215 B |
Binary file not shown.
After Width: | Height: | Size: 191 B |
BIN
app/src/main/res/drawable/logo.png
Normal file
BIN
app/src/main/res/drawable/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
166
app/src/main/res/layout/activity_item_random.xml
Normal file
166
app/src/main/res/layout/activity_item_random.xml
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/layMain"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/header_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ivBack"
|
||||||
|
android:layout_width="25dp"
|
||||||
|
android:layout_height="25dp"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:src="@drawable/ic_keyboard_arrow_left_black_24dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvTitle"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="20dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="30dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/ivRefresh"
|
||||||
|
android:layout_width="25dp"
|
||||||
|
android:layout_height="25dp"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:src="@drawable/ic_refresh_black_24dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="130dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:focusable="true"
|
||||||
|
android:focusableInTouchMode="true"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/tv_price_range"
|
||||||
|
android:textSize="15dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/rangeMin"
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:inputType="numberDecimal"
|
||||||
|
android:text="0" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="~"
|
||||||
|
android:textSize="15dp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/rangeMax"
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center"
|
||||||
|
android:inputType="numberDecimal"
|
||||||
|
android:text="0" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnRandom"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="@string/btn_random"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:textStyle="normal" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvResult"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="20dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="3dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:background="#89000000"></LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:text="@string/commodity_list"
|
||||||
|
android:textSize="20dp" />
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@+id/lvCommodity"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layLoading"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -1,13 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/mainLayout"
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:id="@+id/layMain">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="30dp"
|
android:layout_height="@dimen/header_height"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@ -35,12 +39,13 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/ivRefresh"
|
android:id="@+id/ivRefresh"
|
||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
android:src="@drawable/ic_refresh_black_24dp"/>
|
android:src="@drawable/ic_refresh_black_24dp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -55,4 +60,13 @@
|
|||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/layLoading"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
</RelativeLayout>
|
13
app/src/main/res/layout/lay_loading.xml
Normal file
13
app/src/main/res/layout/lay_loading.xml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical" android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="#33000000"
|
||||||
|
android:gravity="center">
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
35
app/src/main/res/layout/listview_commodity_item.xml
Normal file
35
app/src/main/res/layout/listview_commodity_item.xml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?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="30dp"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="60dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="15dp"
|
||||||
|
android:id="@+id/tvSkip"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="20dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvItem"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Simple"
|
||||||
|
android:textSize="20dp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
4
app/src/main/res/values/size.xml
Normal file
4
app/src/main/res/values/size.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<dimen name="header_height">35dp</dimen>
|
||||||
|
</resources>
|
@ -1,4 +1,9 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">BuyWhat</string>
|
<string name="app_name">買什麼</string>
|
||||||
<string name="store_title">商店列表</string>
|
<string name="store_title">商店列表</string>
|
||||||
|
<string name="commodity_list">商品列表</string>
|
||||||
|
<string name="commodity_skip">忽略</string>
|
||||||
|
<string name="commodity_no_skip">不忽略</string>
|
||||||
|
<string name="tv_price_range">價格區間</string>
|
||||||
|
<string name="btn_random">Random!!</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.1.3'
|
ext.kotlin_version = '1.1.3-2'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
Loading…
Reference in New Issue
Block a user