{"id":231429,"date":"2014-07-29T14:02:03","date_gmt":"2014-07-29T10:02:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=231429"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=231429","title":{"rendered":"<span class=\"post_title\">\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c Floating Action Button \u0432 \u0441\u0432\u043e\u0435 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">       \u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043d\u0430 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Google I\/O \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Android \u2014 <b>L<\/b>. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u044b\u0445 \u043f\u043b\u044e\u0448\u0435\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041d\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432, \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u043e, \u0431\u044b\u043b\u043e \u043d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Google \u0434\u043b\u044f \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u2014 Material Design.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 Material Design \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"http:\/\/www.google.com\/design\/spec\/patterns\/promoted-actions.html#promoted-actions-floating-action-button\">Floating Action Button<\/a>.<\/p>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Floating Action Button ?<\/h4>\n<p>  Google \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u00ab\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e\u00bb. \u0421\u0430\u043c\u0430 \u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0444\u043e\u0440\u043c\u0443 \u043a\u0440\u0443\u0433\u0430, \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0434 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/6b0\/504\/c8c\/6b0504c8c6c912eece0b220e1b027d6a.png\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  <b>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c<\/b>, \u0447\u0442\u043e Floating Action Button \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<h4>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0438 \u0433\u0440\u044f\u0437\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u042f \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 FAB \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0441 minSdkVersion = 14 (Ice Cream Sandwich). \u042f \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f\/\u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p>  \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <a href=\"https:\/\/gist.github.com\/Jogan\/9def6110edf3247825c9\">Github Gist<\/a> (\u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0432 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442).<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043b\u044f \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e \u043a\u043e\u0434 \u0437\u0434\u0435\u0441\u044c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">package  your_package;   import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.OvershootInterpolator; import android.widget.FrameLayout;   public class FloatingActionButton extends View {   Context context;   Paint mButtonPaint;   Paint mDrawablePaint;   Bitmap mBitmap;   boolean mHidden = false;     public FloatingActionButton(Context context) {     super(context);     this.context = context;     init(Color.WHITE);   }     public void setFloatingActionButtonColor(int FloatingActionButtonColor) {     init(FloatingActionButtonColor);   }     public void setFloatingActionButtonDrawable(Drawable FloatingActionButtonDrawable) {     mBitmap = ((BitmapDrawable) FloatingActionButtonDrawable).getBitmap();     invalidate();   }     public void init(int FloatingActionButtonColor) {     setWillNotDraw(false);     setLayerType(View.LAYER_TYPE_SOFTWARE, null);       mButtonPaint = new Paint(Paint.ANTI_ALIAS_FLAG);     mButtonPaint.setColor(FloatingActionButtonColor);     mButtonPaint.setStyle(Paint.Style.FILL);     mButtonPaint.setShadowLayer(10.0f, 0.0f, 3.5f, Color.argb(100, 0, 0, 0));     mDrawablePaint = new Paint(Paint.ANTI_ALIAS_FLAG);       invalidate();   }     @Override   protected void onDraw(Canvas canvas) {     setClickable(true);     canvas.drawCircle(getWidth() \/ 2, getHeight() \/ 2, (float) (getWidth() \/ 2.6), mButtonPaint);     canvas.drawBitmap(mBitmap, (getWidth() - mBitmap.getWidth()) \/ 2,         (getHeight() - mBitmap.getHeight()) \/ 2, mDrawablePaint);   }     @Override   public boolean onTouchEvent(MotionEvent event) {     if (event.getAction() == MotionEvent.ACTION_UP) {       setAlpha(1.0f);     } else if (event.getAction() == MotionEvent.ACTION_DOWN) {       setAlpha(0.6f);     }     return super.onTouchEvent(event);   }     public void hideFloatingActionButton() {     if (!mHidden) {       ObjectAnimator scaleX = ObjectAnimator.ofFloat(this, &quot;scaleX&quot;, 1, 0);       ObjectAnimator scaleY = ObjectAnimator.ofFloat(this, &quot;scaleY&quot;, 1, 0);       AnimatorSet animSetXY = new AnimatorSet();       animSetXY.playTogether(scaleX, scaleY);       animSetXY.setInterpolator(new AccelerateInterpolator());       animSetXY.setDuration(100);       animSetXY.start();       mHidden = true;     }   }     public void showFloatingActionButton() {     if (mHidden) {       ObjectAnimator scaleX = ObjectAnimator.ofFloat(this, &quot;scaleX&quot;, 0, 1);       ObjectAnimator scaleY = ObjectAnimator.ofFloat(this, &quot;scaleY&quot;, 0, 1);       AnimatorSet animSetXY = new AnimatorSet();       animSetXY.playTogether(scaleX, scaleY);       animSetXY.setInterpolator(new OvershootInterpolator());       animSetXY.setDuration(200);       animSetXY.start();       mHidden = false;     }   }     public boolean isHidden() {     return mHidden;   }     static public class Builder {     private FrameLayout.LayoutParams params;     private final Activity activity;     int gravity = Gravity.BOTTOM | Gravity.RIGHT; \/\/ default bottom right     Drawable drawable;     int color = Color.WHITE;     int size = 0;     float scale = 0;       public Builder(Activity context) {       scale = context.getResources().getDisplayMetrics().density;       \/\/ The calculation (value * scale + 0.5f) is a widely used to convert to dps to pixel units       \/\/ based on density scale       \/\/ see developer.android.com (Supporting Multiple Screen Sizes)       size = (int) (72 * scale + 0.5f); \/\/ default size is 72dp by 72dp       params = new FrameLayout.LayoutParams(size, size);       params.gravity = gravity;         this.activity = context;     }       \/**      * Sets the gravity for the FAB      *\/     public Builder withGravity(int gravity) {       this.gravity = gravity;       return this;     }       \/**      * Sets the margins for the FAB in dp      *\/     public Builder withMargins(int left, int top, int right, int bottom) {       params.setMargins((int) (left * scale + 0.5f), (int) (top * scale + 0.5f),           (int) (right * scale + 0.5f), (int) (bottom * scale + 0.5f));       return this;     }       \/**      * Sets the FAB drawable      *\/     public Builder withDrawable(final Drawable drawable) {       this.drawable = drawable;       return this;     }       \/**      * Sets the FAB color      *\/     public Builder withButtonColor(final int color) {       this.color = color;       return this;     }       \/**      * Sets the FAB size in dp      *\/     public Builder withButtonSize(int size) {       size = (int) (size * scale + 0.5f);       params = new FrameLayout.LayoutParams(size, size);       return this;     }       public FloatingActionButton create() {       final FloatingActionButton button = new FloatingActionButton(activity);       button.setFloatingActionButtonColor(this.color);       button.setFloatingActionButtonDrawable(this.drawable);       params.gravity = this.gravity;       ViewGroup root = (ViewGroup) activity.findViewById(android.R.id.content);       root.addView(button, params);       return button;     }   } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 XML, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f View \u0443 \u043d\u0430\u0448\u0435\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430\u0434 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 View (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u0434 Navigation Drawer). \u042f \u0440\u0435\u0448\u0438\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c Builder-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c FAB \u0432\u044b\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 View \u0432 Activity \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <i>.create()<\/i>.<\/p>\n<h4>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u041d\u043e \u043a\u0430\u043a \u043c\u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 ?<\/h4>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c Floating Action Button \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"java\">FloatingActionButton fabButton = new FloatingActionButton.Builder(this)      .withDrawable(yourDrawable)      .withButtonColor(Color.WHITE)      .withGravity(Gravity.BOTTOM | Gravity.RIGHT)      .withMargins(0, 0, 16, 16)      .create(); <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043d\u043e\u043f\u043a\u0438 \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 <i>.withButtonSize(int size)<\/i>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0438\u0442 72dp.<\/p>\n<p>  <iframe loading=\"lazy\" src=\"\/\/player.vimeo.com\/video\/101432960\" width=\"500\" height=\"281\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen><\/iframe><\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e Google \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0418 \u0435\u0449\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u043e \u0442\u043e\u043c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 Google \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c floating action button \u0432 support library, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"https:\/\/gist.github.com\/Jogan\/9def6110edf3247825c9\">\u041a\u043e\u0434 \u043d\u0430 Github Gist<\/a>   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/231429\/\"> http:\/\/habrahabr.ru\/post\/231429\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">       \u0412 \u044d\u0442\u043e\u043c \u0433\u043e\u0434\u0443 \u043d\u0430 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Google I\/O \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Android \u2014 <b>L<\/b>. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043d\u043e\u0432\u044b\u0445 \u043f\u043b\u044e\u0448\u0435\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041d\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432, \u043d\u0435\u0441\u043e\u043c\u043d\u0435\u043d\u043d\u043e, \u0431\u044b\u043b\u043e \u043d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 Google \u0434\u043b\u044f \u0443\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u2014 Material Design.<\/p>\n<p>  \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 Material Design \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"http:\/\/www.google.com\/design\/spec\/patterns\/promoted-actions.html#promoted-actions-floating-action-button\">Floating Action Button<\/a>.<\/p>\n<h4>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Floating Action Button ?<\/h4>\n<p>  Google \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u00ab\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e\u00bb. \u0421\u0430\u043c\u0430 \u0436\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0444\u043e\u0440\u043c\u0443 \u043a\u0440\u0443\u0433\u0430, \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0434 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/6b0\/504\/c8c\/6b0504c8c6c912eece0b220e1b027d6a.png\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-231429","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/231429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=231429"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/231429\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=231429"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=231429"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=231429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}