<?xml version="1.0" encoding="utf-8"?>
<!-- 
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/fl_menu"
        android:clickable="true"
        android:layout_width="270dp"
        android:layout_height="270dp"
        android:background="@drawable/prettyfish_bg_floatmenu"
        android:layout_gravity="center">

        <ImageView
            android:id="@+id/iv_back"
            android:padding="5dp"
            android:layout_width="34dp"
            android:layout_height="30dp"
            android:layout_gravity="center"
            android:src="@drawable/prettyfish_icon_back" />
    </FrameLayout>
</FrameLayout><!-- From: file:/Users/ricky/Desktop/ricky/allgitcode/prettyfish/prettyfish_base/src/main/res/layout/prettyfish_floatmenuview.xml -->