Finally added coordinator layout with proper action bar

This commit is contained in:
Vladislav Khorev 2017-06-10 04:19:31 +03:00
parent 9de09e0855
commit 621d4fef2c
10 changed files with 175 additions and 61 deletions

View File

@ -28,6 +28,8 @@ dependencies {
})
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:25.4.0'
compile 'com.android.support:design:25.4.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
implementation 'com.google.android.gms:play-services-maps:10.2.1'
implementation 'com.google.android.gms:play-services-location:10.2.1'

View File

@ -30,7 +30,8 @@
<activity
android:name=".YelpMapActivity"
android:label="@string/title_activity_maps">
android:label="@string/title_activity_maps"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@ -1,17 +1,8 @@
package fishrungames.yelpmapapp
import android.content.Context
import com.google.gson.JsonArray
import com.koushikdutta.ion.Ion
import java.io.BufferedInputStream
import java.net.HttpURLConnection
import java.net.URL
import java.security.AccessController.getContext
import com.google.gson.JsonObject
import com.koushikdutta.async.future.FutureCallback
import android.os.AsyncTask
import org.json.JSONObject
import com.koushikdutta.ion.Ion
/**
* Created by mephi on 09.06.2017.

View File

@ -0,0 +1,26 @@
package fishrungames.yelpmapapp
import android.support.v4.app.Fragment
import android.os.Bundle
import android.view.ViewGroup
import android.view.LayoutInflater
import android.view.View
/**
* Created by mephi on 10.06.2017.
*/
class DetailFragment : Fragment()
{
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater!!.inflate(R.layout.detail_fragment, container, false)
return rootView
}
}

View File

@ -11,7 +11,7 @@ import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import android.support.v4.app.FragmentActivity
import android.os.Bundle
import android.support.v4.content.ContextCompat
@ -20,14 +20,15 @@ import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.OnMapReadyCallback
import com.google.android.gms.maps.SupportMapFragment
import com.google.android.gms.maps.model.LatLng
import com.google.android.gms.maps.model.MarkerOptions
import android.widget.Toast
import android.support.v4.app.ActivityCompat
import android.content.DialogInterface
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
open class MapsActivity : FragmentActivity(), OnMapReadyCallback, LocationListener,
open class MapsActivity : AppCompatActivity(), OnMapReadyCallback, LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
@ -42,37 +43,26 @@ open class MapsActivity : FragmentActivity(), OnMapReadyCallback, LocationListen
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment
val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
//val mapFragment = SupportMapFragment()
//supportFragmentManager.beginTransaction().add(R.id.container, mapFragment).commit()
mapFragment.getMapAsync(this)
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
override fun onMapReady(googleMap: GoogleMap) {
// Add a marker in Sydney and move the camera
//val sydney = LatLng(-34.0, 151.0)
//googleMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
//googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//Location Permission already granted
buildGoogleApiClient()
googleMap.isMyLocationEnabled = true
} else {
//Request Location Permission
checkLocationPermission()
}
@ -128,18 +118,16 @@ open class MapsActivity : FragmentActivity(), OnMapReadyCallback, LocationListen
private fun checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
AlertDialog.Builder(this)
.setTitle("Location Permission Needed")
.setMessage("This app needs the Location permission, please accept to use location functionality")
.setPositiveButton("OK", DialogInterface.OnClickListener { dialogInterface, i ->
//Prompt the user once explanation has been shown
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSIONS_REQUEST_LOCATION_CODE)

View File

@ -4,16 +4,8 @@ import android.location.Location
import android.os.Handler
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.model.Marker
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import com.google.android.gms.maps.model.MarkerOptions
import com.google.android.gms.maps.model.LatLng
import java.util.*
import com.google.maps.android.clustering.ClusterManager
import com.google.android.gms.maps.CameraUpdateFactory
import android.widget.Toast
@ -137,21 +129,20 @@ class YelpMapActivity : MapsActivity(), GoogleMap.OnInfoWindowClickListener
private fun setUpClusterer(googleMap: GoogleMap) {
// Initialize the manager with the context and the map.
// (Activity extends context, so we can pass 'this' in the constructor.)
mClusterManager = ClusterManager<MapMarkerClusterItem>(this, googleMap)
// Point the map's listeners at the listeners implemented by the cluster
// manager.
googleMap.setOnCameraIdleListener(mClusterManager)
googleMap.setOnMarkerClickListener(mClusterManager)
}
override fun onInfoWindowClick(marker: Marker) {
Toast.makeText(this, "Info window clicked",
Toast.LENGTH_SHORT).show()
val detailFragment = DetailFragment()
supportFragmentManager.beginTransaction().add(R.id.container, detailFragment).addToBackStack("detailFragment").commit()
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -1,8 +1,47 @@
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginStart="18dp"
android:text="Yelp Map App"
android:textAppearance="@style/TextAppearance.AppCompat.Large.Inverse" />
</LinearLayout>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="fishrungames.yelpmapapp.YelpMapActivity" />
android:layout_height="match_parent" />
</LinearLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</FrameLayout>

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/main.appbar"
android:layout_width="match_parent"
android:layout_height="300dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
>
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
>
<ImageView
android:id="@+id/main.backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
android:src="@drawable/bkgtest"
app:layout_collapseMode="parallax"
/>
<android.support.v7.widget.Toolbar
android:id="@+id/main.toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin"
/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:lineSpacingExtra="8dp"
android:text="La la la la la la"
android:padding="12dp"
/>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>

View File

@ -8,4 +8,13 @@
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>